前言:
在springboot中使用logbac-spring.xml單獨打印mybaits中的sql,另存一個單獨的日志中。
1、yml配置
# 日志配置
logging:
level:
com.xxxx.mapper: debug
org.springframework: warn
config: classpath:logback-app.xml
file:
path: ./logs/app
2、logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property resource="application.yml"/>
<!-- 日志文件存放路徑 -->
<springProperty scope="context" name="FILE_PATH" source="logging.file.path"/>
<!-- 文件輸出格式 -->
<!-- 1格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
<property name="FILE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}: %msg%n"/>
<!-- 日志最大保存數(shù)量 -->
<property name="MAX_HISTORY" value="10"/>
<!-- 日志文件大小 -->
<property name="FILE_SIZE" value="10MB"/>
<!-- info文件,記錄info級別日志 -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 實時輸出的日志文件 -->
<file>${FILE_PATH}/sys-info.log</file>
<append>true</append>
<!-- 歷史日志分塊,配置滾動的策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志名稱的格式 -->
<fileNamePattern>${FILE_PATH}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 保存的最長時間:天數(shù) -->
<MaxHistory>${MAX_HISTORY}</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_PATTERN}</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>${FILE_SIZE}</MaxFileSize>
</triggeringPolicy>
<!-- 過濾掉非info的日志,即此日志文件中只會輸出info日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 過濾的級別 -->
<level>INFO</level>
<!-- 匹配時的操作:接收(記錄) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配時的操作:拒絕(不記錄) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- error文件,記錄error級別日志 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 實時輸出的日志文件 -->
<file>${FILE_PATH}/sys-error.log</file>
<append>true</append>
<!-- 歷史日志分塊,配置滾動的策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志名稱的格式 -->
<fileNamePattern>${FILE_PATH}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 保存的最長時間:天數(shù) -->
<MaxHistory>${MAX_HISTORY}</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_PATTERN}</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>${FILE_SIZE}</MaxFileSize>
</triggeringPolicy>
<!-- 過濾掉非error的日志,即此日志文件中只會輸出error日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 過濾的級別 -->
<level>ERROR</level>
<!-- 匹配時的操作:接收(記錄) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配時的操作:拒絕(不記錄) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- debug文件,記錄debug級別日志 -->
<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 實時輸出的日志文件 -->
<file>${FILE_PATH}/sys-debug.log</file>
<append>true</append>
<!-- 歷史日志分塊,配置滾動的策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志名稱的格式 -->
<fileNamePattern>${FILE_PATH}/sys-debug.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 保存的最長時間:天數(shù) -->
<MaxHistory>${MAX_HISTORY}</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_PATTERN}</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>${FILE_SIZE}</MaxFileSize>
</triggeringPolicy>
<!-- 過濾掉非debug的日志,即此日志文件中只會輸出debug日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 過濾的級別 -->
<level>DEBUG</level>
<!-- 匹配時的操作:接收(記錄) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配時的操作:拒絕(不記錄) -->
<onMismatch>DENY</onMismatch>>
</filter>
</appender>
<!-- sql文件,記錄DEBUG級別日志 -->
<appender name="SQL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 實時輸出的日志文件 -->
<file>${FILE_PATH}/sys-sql.log</file>
<append>true</append>
<!-- 歷史日志分塊,配置滾動的策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志名稱的格式 -->
<fileNamePattern>${FILE_PATH}/sys-sql.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 保存的最長時間:天數(shù) -->
<MaxHistory>${MAX_HISTORY}</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_PATTERN}</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>${FILE_SIZE}</MaxFileSize>
</triggeringPolicy>
<!-- 過濾掉非debug的日志,即此日志文件中只會輸出debug日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 過濾的級別 -->
<level>DEBUG</level>
<!-- 匹配時的操作:接收(記錄) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配時的操作:拒絕(不記錄) -->
<onMismatch>DENY</onMismatch>>
</filter>
</appender>
<!-- 控制臺輸出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_PATTERN}</pattern>
</encoder>
</appender>
<!-- 打印 Spring 在啟動的時候初始化各個 Bean 的信息 -->
<logger name="org.springframework" level="WARN"/>
<!--mybatis日志 mapper包所在路徑-->
<logger name="com.xxx.mapper" level="DEBUG" additivity="false">
<appender-ref ref="SQL_FILE" />
<appender-ref ref="STDOUT" />
</logger>
<!-- 相當(dāng)于logger元素,只是name值已經(jīng)確定為root了 -->
<root level="INFO">
<appender-ref ref="INFO_FILE" />
<appender-ref ref="ERROR_FILE" />
<appender-ref ref="DEBUG_FILE" />
<appender-ref ref="STDOUT" />
</root>
</configuration>
3、關(guān)鍵幾點
幾個關(guān)鍵點
a. 文件名需要為??logback-spring.xml??; 動態(tài)日志路徑才會生效; 屬性文件中配置 ??log.path=xxx??;
【Log日志】logback.xml動態(tài)配置屬性值(包括接入的第三方配置)
b. levle 需要是DEBUG等級; 因為sql日志是DEBUG等級的;name= 存放mapper文件的包路徑
<!--mybatis日志 mapper包所在路徑-->
<logger name="com.xxx.mapper" level="DEBUG" additivity="false">
<appender-ref ref="SQL_FILE" />
<appender-ref ref="STDOUT" />
</logger>
c. mybatis的log-impl需要配置正確的實現(xiàn)類 比如 在maybatis-plus中
# MyBatis配置
mybatis:
# 搜索指定包別名
typeAliasesPackage: com.xxx.**.domain
# 配置mapper的掃描,找到所有的mapper.xml映射文件
mapperLocations: classpath*:mapper/**/*Mapper.xml
configuration:
# 指定 MyBatis 所用日志的具體實現(xiàn)
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
# 開啟自動下劃線格式轉(zhuǎn)駝峰格式
map-underscore-to-camel-case: true
# 全局映射器啟用緩存
cache-enabled: true
# 允許 JDBC 支持自動生成主鍵
use-generated-keys: true
# 執(zhí)行模式。默認(rèn)是 SIMPLE
default-executor-type: reuse
# 允許查詢結(jié)果為null
call-setters-on-nulls: true
d. 我之前就是一直配置的是 ??log-impl: org.apache.ibatis.logging.stdout.StdOutImpl?? ;導(dǎo)致文件只能出現(xiàn)在控制臺;卻沒有打印到文件中;
參數(shù)值的默認(rèn)值設(shè)置
如果配置文件沒有設(shè)置屬性. 可以在使用的地方設(shè)置默認(rèn)值 例如???${log.path:-默認(rèn)值}?文章來源:http://www.zghlxwxcb.cn/news/detail-412347.html
參考資料:
https://blog.51cto.com/szzdzhp/5300674
https://blog.csdn.net/happyxin_/article/details/128844723?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-2-128844723-blog-116700232.235%5Ev28%5Epc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-2-128844723-blog-116700232.235%5Ev28%5Epc_relevant_default&utm_relevant_index=3
https://blog.csdn.net/DreamMryang/article/details/115351202文章來源地址http://www.zghlxwxcb.cn/news/detail-412347.html
到了這里,關(guān)于【LogBack日志】打印mybatis中sql日志并存放到指定文件中的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!