gpt4 book ai didi

java - log4j级别跟踪和调试没有显示任何日志

转载 作者:行者123 更新时间:2023-11-30 03:22:19 26 4
gpt4 key购买 nike

在 log4j 中,有最低级别的跟踪、调试、信息、警告、错误和致命。我使用级别信息通过此代码记录我的网络应用程序

<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 上显示级别错误(如果有的话可能是 fatal error )的记录器。

但是为什么当我尝试降低日志信息以跟踪/调试而没有级别信息或错误时,它没有出现任何内容,也没有创建记录器。

当我设置最低的 log4j 级别时,它应该显示该级别及以上级别的所有日志,就像在信息级别上应该做的那样(显示从信息到致命的日志)。

  • 为什么级别变为trace/debug而不是level info时却什么也没有显示?

  • 真的没有其他方法可以将错误日志与其他日志分离到另一个文件吗?

最佳答案

尝试使用可加性设置为 false 的类别。我还没有测试过,但类似以下的内容应该可以工作:

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

<appender name="errorlog" class="org.apache.log4j.DailyRollingFileAppender">
<param name="Threshold" value="ERROR"/>
<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>

<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<param name="Threshold" value="INFO"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{ISO8601}] [%-5p] [%t] {%F:%M:%L} - %m%n"/>
</layout>
</appender>

<!-- all error from com.myapp to errorlog only -->
<category name="com.myapp" additivity="false">
<priority value="error" />
<appender-ref ref="errorlog"/>
</category>

<!-- all other log from com.myapp to abclog only -->
<category name="com.myapp" additivity="false">
<priority value="info" />
<appender-ref ref="abclog"/>
</category>

<root>
<!-- all other log to console -->
<appender-ref ref="console"/>
</root>

</log4j:configuration>

如果你想分离com.myappcom.myapp.controller,你可以声明更多的类别。但您应该在 com.myapp 之前声明 com.myapp.controller

更新:您可以尝试使用过滤器,也许这就是您所需要的,之后,我就没有更多的想法了:

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

<appender name="errorlog" class="org.apache.log4j.DailyRollingFileAppender">
<param name="Threshold" value="ERROR"/>
<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>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="ERROR" />
<param name="levelMax" value="FATAL" />
</filter>
</appender>

<appender name="abclog" class="org.apache.log4j.DailyRollingFileAppender">
<param name="Threshold" value="INFO"/>
<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>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="INFO" />
<param name="levelMax" value="WARN" />
</filter>
</appender>

<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<param name="Threshold" value="INFO"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{ISO8601}] [%-5p] [%t] {%F:%M:%L} - %m%n"/>
</layout>
</appender>

<!-- all log from com.myapp to special log file -->
<category name="com.myapp" additivity="false">
<appender-ref ref="errorlog"/>
<appender-ref ref="abclog"/>
</category>

<root>
<appender-ref ref="console"/>
</root>

</log4j:configuration>

关于java - log4j级别跟踪和调试没有显示任何日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31048569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com