【发布时间】:2021-03-10 12:15:05
【问题描述】:
我们在一个 tomcat 上有多个应用程序,它们使用 System.out.println 语句记录到 catalina.out。 有一个应用程序会创建大量日志语句,因此我想将这些应用程序输出记录到单独的日志文件中。
我创建了一个 log4j.xml 设置,它只将 WARN 级别记录到 catalina.out。 但是 RollingFileAppender 还不适用于 System.out 语句,我不确定要更改什么。
我不想碰其他应用程序。这有可能吗?
<Configuration status="INFO">
<Appenders>
<Console name="stdout" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36}: %msg%n" />
</Console>
<RollingFile
name="logFile"
fileName="../logs/app/log.log"
filePattern="../logs/app/log.%d{yyyy-MM-dd}.log.gz"
ignoreExceptions="false">
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
</Policies>
<DefaultRolloverStrategy max="31" />
</RollingFile>
<Async name="logFile_async">
<AppenderRef ref="logFile"/>
</Async>
</Appenders>
<Loggers>
<Root level="WARN">
<AppenderRef ref="stdout" />
</Root>
<Logger name="my.company.logger" level="DEBUG">
<AppenderRef ref="logFile_async"/>
</Logger>
</Loggers>
</Configuration>
【问题讨论】:
-
使用
System.out不是记录消息的正确方法,并且相当困难将其重定向到适当的记录框架。您混淆了方向:您将 Log4j2 配置为记录到System.out,而您需要将System.out替换为将所有行发送到 Log4j2 的PrintStream。这不是一个简单的操作。 -
@PiotrP.Karwasz 感谢您确认我的想法。在能够将所有 System.out 语句重构为 log4j 之前,它的目的是作为一种捷径。可能我们需要直接进行重构。
标签: java log4j tomcat9 system.out