我有一些 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() 打印的所有控制台输出重定向到一个文件,并且可以进行日志轮换并按类/包进行过滤。我的限制:
我尝试通过添加
>>..\logs\myconsole.log 2>&1
来更改tomcat内的startup.bat。它可以工作,但是没有日志轮换,如果我让服务器运行几个月,日志文件将无法管理。另外,我无法仅过滤特定类/包的日志。
此 tomcat 没有 Windows 注册表设置,我无法更改那里的日志记录设置。
我发现了 sysout-over-slf4j 库可以做到这一点,但它太过时了,我什至无法再从官方网站下载它。
有办法做到这一点吗?
最后的解决方案是更改 tomcat 服务器的
conf/context.xml
配置,并将 swallowOutput="true"
属性添加到 <Context>
标签,如下所示:<Context swallowOutput="true">
。
输出到此文件
logs/localhost.*.log
。
虽然,据我了解,这
swallowOutput="true"
是一个技巧,并且有一些限制,如here所写,但我找不到任何其他方法。
最后,这也是产品供应商推荐的:)