问题遇到的现象和发生背景
在springboot的核心配置文件做了两组实验,分别设置spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy和spring.datasource.driver-class-name=net.sf.log4jdbc.DriverSpy。然后使用logback-spring.xml配置下图的配置信息。但是得到了不同的sql日志信息。使用spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy的logback-spring.xml的logger没有生效,而spring.datasource.driver-class-name=net.sf.log4jdbc.DriverSpy的logback-spring.xml的logger生效了.。想问一下这两个配置的联系和区别,以及产生这样的原因。
问题相关代码,请勿粘贴截图
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>D:/home/log/111/111.log</File>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>D:/home/log/111/111.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<!--记录系统执行过的sql语句 additivity参数是是否上上级汇报结果,选择true就会执行两次打印自己一次,上级一次-->
<logger name="jdbc.sqlonly" level="INFO" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</logger>
<logger name="jdbc.resultsettable" level="INFO" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</logger>
<!--记录返回结果集信息(就是那些一大堆的ResultSet.wasNull() returned false那些日志)-->
<logger name="jdbc.resultset" level="OFF" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</logger>
<!--记录数据库连接和释放信息,可记录当前的数据库连接数,便于诊断连接是否释放-->
<logger name="jdbc.connection" level="OFF" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</logger>
<!--记录sql执行的时间,可以分析耗时的sql语句-->
<logger name="jdbc.sqltiming" level="OFF" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</logger>
<!--记录除了ResultSet外的所有JDBC调用情况,一般不需要-->
<logger name="jdbc.audit" level="OFF" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</logger>
</configuration>
运行结果及报错内容
net.sf.log4jdbc.sql.jdbcapi.DriverSpy的日志结果图包含了一堆我不想要的日志:
net.sf.log4jdbc.DriverSpy的日志结果图: