hibernate 5.6.14 logback日志正在工作



我有一个使用Hibernate的Spring应用程序(不是Spring引导!!)Spring框架版本为5.3.26。Hibernate版本为5.6.14.Final

<!-- Logging dependencies -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.4.6</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.4.6</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.7</version>
</dependency>

实际上,我想记录应用程序相关的类DEBUG +所有其他类(spring, flyway, poi等)到一个文件,SQL相关的类到另一个文件。这是logback.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<property name="LOGS" value="${APP_HOME}/logs" />
<appender name="RollingFileAll"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOGS}/all.log</file>
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</encoder>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOGS}/%d{yyyy-MM, aux}/all-%d{yyyy-MM-dd}.log.gz
</fileNamePattern>
<maxHistory>60</maxHistory>
<totalSizeCap>250MB</totalSizeCap>
</rollingPolicy>
</appender>

<appender name="RollingFileSql"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOGS}/sql.log</file>
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSSXXX} %p %c{3} [%t] user=%X{userName} %m%n</Pattern>
</encoder>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOGS}/%d{yyyy-MM, aux}/sql-%d{yyyy-MM-dd}.log.gz
</fileNamePattern>
<maxHistory>60</maxHistory>
<totalSizeCap>250MB</totalSizeCap>
</rollingPolicy>
</appender>
<!-- LOG "application classes" at debug level -->
<logger name="com.Application.cctng" level="debug" additivity="false">
<appender-ref ref="RollingFileAll" />
</logger>
<logger name="org.hibernate.SQL" level="debug" additivity="false" >
<appender-ref ref="RollingFileSql"  />
</logger>
<logger name="org.hibernate.type.descriptor.sql" level="trace" additivity="false" >
<appender-ref ref="RollingFileSql"  />
</logger>
<logger name="org.hibernate.stat" level="debug" additivity="false">
<appender-ref ref="RollingFileSql"/>
</logger>
<logger name="org.hibernate.SQL_SLOW" level="info" additivity="false">
<appender-ref ref="RollingFileSql"/>
</logger>
<logger name="org.hibernate.cache" level="debug" additivity="false">
<appender-ref ref="RollingFileSql"/>
</logger>
<!--   LOG everything at INFO level-->
<root level="info" >
<appender-ref ref="RollingFileAll" />
</root>
</configuration>

但是sql日志文件是完全空的,而应用程序相关的日志工作正常。

JBoss logging尝试找到合适的日志提供者。

  • 首先,它检查系统属性org.jboss.logging.provider。我当然没有。
  • 然后,根据类路径中可用的类进行尝试。由于某种原因,log4j2优先于slf4j。在我的例子中,我使用Apache POI,它包含log4j2类,因此系统找到了这些类,并选择log4j2日志框架作为日志提供者。但是我在参考资料中没有log4j2配置,所以没有hibernate日志。

这意味着,我的解决方案是设置-Dorg.jboss.logging.provider="slf4j"作为JVM选项。

最新更新