java - Log4j 不打印第 3 方日志(Spring.Hibernate 等)到 RollingFileAppender

标签 java hibernate spring jakarta-ee log4j

我使用 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/

相关文章:

Spring MVC jackson消息转换器日期格式不起作用,总是返回长时间戳

java - Spring MVC 与 XML

java - 导入 Apache HTTP 组件 Android Studio 1.3.2

JavaFX getResource 在浏览器中运行时返回 null

java - 注入(inject) Autowiring 的依赖项失败;无法 Autowiring 字段

java - Spring存储库 Hibernate基于关联实体列表构建实体列表

java - android中所有 Activity 的单一socket.IO连接

java - 如何在多线程应用程序中使用 Locale 来提高性能

java - 如何使用外键类型从 jpa 存储库返回选择查询

java - Spring mcvc 应用程序中未选取 Log4j2 属性