Tomcat 9中如何将System.out.println打印的所有日志保存到ta文件中

问题描述 投票:0回答:1

我有一些 Windows 产品,它是 .exe 文件。当我运行它时,它有 tomcat 9 服务器,里面有一些 web 应用程序,并且它通过startup.bat 在后台运行 tomcat。在后台运行startup.bat意味着我根本看不到tomcat窗口。我只在任务管理器中看到java.exe进程和catalina.log之类的日志,但我确信它通过startup.bat运行tomcat,而不是通过tomcat.exe。由于startup.bat将所有通过System.out.println()打印的输出输出到控制台,所以它对我来说根本不可见(完全丢失)。因为它是专有产品,所以我无法修改代码,也无权访问代码。

我想问如何将使用 System.out.println() 打印的所有控制台输出重定向到一个文件,并且可以进行日志轮换并按类/包进行过滤。我的限制:

  • 我无法将 System.out.println() 更改为 Logger.info(),因为它是专有产品
  • 我无法调用 System.setOut(...);用我的记录仪。
  • 我可以更改tomcat配置,例如web应用程序中的logging.properties或log4j2.properties。

我尝试通过添加

>>..\logs\myconsole.log 2>&1
来更改tomcat内的startup.bat。它可以工作,但是没有日志轮换,如果我让服务器运行几个月,日志文件将无法管理。另外,我无法仅过滤特定类/包的日志。

此 tomcat 没有 Windows 注册表设置,我无法更改那里的日志记录设置。

我发现了 sysout-over-slf4j 库可以做到这一点,但它太过时了,我什至无法再从官方网站下载它。

有办法做到这一点吗?

java tomcat logging tomcat9
1个回答
0
投票

最后的解决方案是更改 tomcat 服务器的

conf/context.xml
配置,并将
swallowOutput="true"
属性添加到
<Context>
标签,如下所示:
<Context swallowOutput="true">

输出到此文件

logs/localhost.*.log

虽然,据我了解,这

swallowOutput="true"
是一个技巧,并且有一些限制,如here所写,但我找不到任何其他方法。

最后,这也是产品供应商推荐的:)

© www.soinside.com 2019 - 2024. All rights reserved.