【发布时间】:2015-09-11 22:55:10
【问题描述】:
在 log4j 中有最低级别的跟踪、调试、信息、警告、错误和致命。 我使用级别信息通过此代码记录我的 Web 应用程序
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="abclog" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="/data/abc/abc.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{ISO8601}] [%-5p] [%t] {%F:%M:%L} - %m%n"/>
</layout>
</appender>
<logger name="com.myapp">
<level value="info" />
<appender-ref ref="abclog"/>
</logger>
<logger name="com.myapp.controller">
<level value="info" />
<appender-ref ref="abclog"/>
</logger>
</log4j:configuration>
它会产生 abc.log 包含从级别信息到致命的日志。
然后我尝试将错误日志仅移动到另一个文件error.log。
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="errorlog" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="/data/abc/error.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{ISO8601}] [%-5p] [%t] {%F:%M:%L} - %m%n"/>
</layout>
</appender>
<appender name="abclog" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="/data/abc/abc.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{ISO8601}] [%-5p] [%t] {%F:%M:%L} - %m%n"/>
</layout>
</appender>
<logger name="com.myapp">
<level value="error" />
<appender-ref ref="errorlog"/>
</logger>
<logger name="com.myapp.controller">
<level value="error" />
<appender-ref ref="errorlog"/>
</logger>
<logger name="com.myapp">
<level value="info" />
<appender-ref ref="abclog"/>
</logger>
<logger name="com.myapp.controller">
<level value="info" />
<appender-ref ref="abclog"/>
</logger>
</log4j:configuration>
但是没有用,所有记录器仍在 abc.log 中。我发现记录器输出的所有消息都等于该级别以及所有高于该级别的消息,这就是日志仍在 abc.log 中的原因。
当我删除 abclog 和日志级别信息时,它起作用了。它会在error.log上显示来自级别错误的记录器(如果有的话,可能是致命错误)。
但是为什么当我试图在没有级别信息或错误的情况下降低日志信息以跟踪/调试时,它没有提出任何内容,没有创建记录器。
当我设置最低的 log4j 级别时,它应该显示其级别及更高级别的所有日志,就像它应该在信息级别执行的操作一样(显示从信息到致命的日志)。
当级别更改为跟踪/调试而不是级别信息时,为什么它会什么也没有显示?
难道真的没有其他方法可以将错误日志与其他日志分开吗?
【问题讨论】:
标签: java spring logging web-applications log4j