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

bsxbgnwa  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(99)

我有一些Windows产品,它是.exe文件。当我运行它时,它有tomcat 9服务器,里面有一些webapp,它通过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(),因为它是专有产品
  • 我无法使用Logger调用System.setOut(...);。
  • 我可以在webapp中更改tomcat的名称,例如logging.properties或log4j2.properties。

我试图通过添加>>..\logs\myconsole.log 2>&1来更改tomcat中的startup.bat。它可以工作,但没有日志循环,如果我让服务器运行几个月,日志文件将无法管理。此外,我不能只将日志过滤到特定的类/包。
没有此tomcat的Windows注册表设置,我无法更改日志记录设置。
我发现了sysout-over-slf 4j库,它可以做到这一点,但它太过时了,我甚至不能从官方网站下载它了。
有办法做到这一点吗?

eeq64g8w

eeq64g8w1#

最后,解决方案是更改tomcat服务器的conf/context.xml配置,并将swallowOutput="true"属性添加到<Context>标记中,如下所示:<Context swallowOutput="true">
输出到这个文件logs/localhost.*.log
虽然,据我所知,这swallowOutput="true"是一个技巧,并有一些限制,因为写here,但我找不到任何其他方法。
最后,这也是产品供应商推荐的:)

相关问题