我使用 log4j 已经有一段时间了,阅读了很多文章,看起来都很简单,但是当我实现它时,它似乎不起作用。
我有以下要求:
1-> 需要为 2 个不同的包创建 2 个文件:
所以我根据 log4j 规范创建了它,它基于 2 个不同的包创建了 2 个文件,但只有从我们的应用程序记录的日志才会记录到这些文件中。
从 Spring 或 Hibernate 和 Ibatis 生成的日志根本不会记录到文件中,但它们会记录到并且所有其他日志都会记录到控制台中。
我正在放置我正在使用的 log4j.xml,任何帮助将不胜感激: 我也尝试了很多组合,比如从 root appender 删除了记录器中已经提到的引用,将它们添加回根,向记录器添加可添加性但没有任何效果:
<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
<param name="Threshold" value="DEBUG"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} DSL Service(CONSOLE) %-5p %c [%t]: %m%n%n"/>
</layout>
</appender>
<appender name="FEPOCServiceLog"
class="org.apache.log4j.RollingFileAppender">
<param name="Append" value="true"/>
<param name="maxFileSize" value="100KB" />
<param name="maxBackupIndex" value="5" />
<param name="File" value="C:\\tmp\\DSLService_1.0.log" />
<param name="threshold" value="DEBUG"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{ISO8601} DService(CONSOLE) %-5p %c [%t]: %m%n%n" />
</layout>
</appender>
<appender name="iServiceLog"
class="org.apache.log4j.RollingFileAppender">
<param name="maxFileSize" value="10MB" />
<param name="maxBackupIndex" value="5" />
<param name="File" value="C:\\tmp\\iService_1.0.log" />
<param name="threshold" value="DEBUG"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{ISO8601} iService(CONSOLE) %-5p %c [%t]: %m%n%n" />
</layout>
</appender>
希望对您有所帮助:
<logger name="com.fepoc.services.dataservice">
<level value="DEBUG"/>
<appender-ref ref="FEPOCServiceLog"/>
</logger>
<logger name="com.fepoc.mpbit">
<level value="DEBUG"/>
<appender-ref ref="iServiceLog"/>
</logger>
<logger name="net.sf.hibernate">
<level value="DEBUG"/>
<appender-ref ref="FEPOCServiceLog"/>
</logger>
<logger name="org.hibernate">
<level value="DEBUG"/>
<appender-ref ref="FEPOCServiceLog"/>
</logger>
<logger name="com.mchange.v2">
<level value="DEBUG"/>
<appender-ref ref="FEPOCServiceLog"/>
</logger>
<logger name="com.ibatis.sqlmap">
<level value="DEBUG"/>
<appender-ref ref="FEPOCServiceLog"/>
</logger>
<logger name="org.springframework">
<level value="DEBUG"/>
<appender-ref ref="FEPOCServiceLog"/>
</logger>
...
<root>
<priority value ="debug" />
<appender-ref ref="ConsoleAppender"/>
<appender-ref ref="FEPOCServiceLog"/>
<appender-ref ref="iServiceLog"/>
谢谢, NK
最佳答案
问题是 Spring 和 Hibernate 不使用 log4j。
Hibernate 内部使用 slf4j ,因此您需要将 slf4j-log4j
绑定(bind)添加到您的类路径,以便将其输出重定向到 log4j,请参阅 SLF4J user manual .
Spring 使用 Commons Logging,您可以通过添加 jcl-slf4j
桥和 slf4j-log4j
绑定(bind)通过 slf4j 将其输出重定向到 log4j,参见 Logging Dependencies in Spring .
关于java - Log4j 不打印第 3 方日志(Spring.Hibernate 等)到 RollingFileAppender,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4938754/