springboot使用logback,日誌記錄方式:控制檯,檔案,資料庫
阿新 • • 發佈:2019-02-13
使用xml檔案配置:在resources下建立logback-spring.xml,spring會預設去讀這個檔案
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
<!-- 控制檯日誌 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d %-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<!-- 檔案日誌,每天一個,最多30個 -->
<appender name="FileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>d:\test.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>d:\test.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d %-4relative [%thread] %-5level %logger{35} %class:%L - %msg %n</pattern>
</encoder>
</appender>
<!-- Log格式-使用者操作-資料庫日誌 -->
<appender name="UserLogDBAppender" class="com.grm.logbacktest.logback.TopDBAppender">
<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
<dataSource class="org.apache.tomcat.jdbc.pool.DataSource">
<driverClassName class="com.mysql.jdbc.Driver" />
<url>jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8</url>
<username>root</username>
<password>root</password>
</dataSource>
</connectionSource>
<insertsql>
INSERT INTO TB_USER_LOG(ID, ACCOUNT, USER_ID, USER_NAME, ORG_CODE, ORG_NAME, IP, DESCRIPTION, LEVEL)
VALUES(uuid(),?,?,?,?,?,?,?,?);
</insertsql>
<params>
%X{account},%X{userId},%X{userName},%X{orgCode},%X{orgName},%X{ip},%X{description},%X{level}
</params>
<dateformat>yyyy-MM-dd HH:mm:ss</dateformat>
</appender>
<!-- 根日誌logger -->
<root level="INFO" name="root">
<!--輸出日誌到檔案-->
<appender-ref ref="FileAppender"/>
<!--控制檯輸出日誌-->
<appender-ref ref="STDOUT"/>
</root>
<!-- 使用者操作日誌logger -->
<logger name="UserLogger" level="INFO" >
<appender-ref ref="UserLogDBAppender"/>
</logger>
</configuration>
其中:ch.qos.logback.core.ConsoleAppender 日誌在控制檯輸出
ch.qos.logback.core.rolling.RollingFileAppender 日誌輸出到檔案
com.grm.logbacktest.logback.TopDBAppender 自定義類,可以實現將日誌插入到自己指定的資料庫
在需要記錄日誌的類中定義
private static final Logger loggerRoot = LoggerFactory.getLogger("root");//root為xml檔案中的root標籤的名字
配合root標籤(在root標籤內新增appender-ref)可以實現將日誌記錄到控制檯和檔案
日誌存入資料庫,logback有預設的DBAppender(所在位置ch.qos.logback.classic.db.DBAppender),如果使用預設的appender的話,存入資料庫的表也是固定的,表結構的sql在ch.qos.logback.classic.db.script包下,裡面有適合的sql檔案。但是如果想要自定義資料庫日誌表的話就不能使用預設的DBAppender,需要自己寫DBAppender
實現寫入自定義資料庫表的功能,核心有TopDBAppender(解析logback-spring.xml時使用),TopLogger(記錄日誌時使用),WebBaseController(web層想要記錄日誌需要繼承這個類)
private static final TopLogger loggerUser = new TopLogger("UserLogger");//UserLogger為xml檔案中logger標籤的名字
使用時UserLog userLog = new UserLog();
userLog.setDescription("日誌記錄資料庫測試");//description自定義的描述資訊
super.info(userLog);
原始碼地址:https://github.com/GRM-RM/logback-test
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
<!-- 控制檯日誌 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d %-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<!-- 檔案日誌,每天一個,最多30個 -->
<appender name="FileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>d:\test.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>d:\test.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d %-4relative [%thread] %-5level %logger{35} %class:%L - %msg %n</pattern>
</encoder>
</appender>
<!-- Log格式-使用者操作-資料庫日誌 -->
<appender name="UserLogDBAppender" class="com.grm.logbacktest.logback.TopDBAppender">
<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
<dataSource class="org.apache.tomcat.jdbc.pool.DataSource">
<driverClassName class="com.mysql.jdbc.Driver" />
<url>jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8</url>
<username>root</username>
<password>root</password>
</dataSource>
</connectionSource>
<insertsql>
INSERT INTO TB_USER_LOG(ID, ACCOUNT, USER_ID, USER_NAME, ORG_CODE, ORG_NAME, IP, DESCRIPTION, LEVEL)
VALUES(uuid(),?,?,?,?,?,?,?,?);
</insertsql>
<params>
%X{account},%X{userId},%X{userName},%X{orgCode},%X{orgName},%X{ip},%X{description},%X{level}
</params>
<dateformat>yyyy-MM-dd HH:mm:ss</dateformat>
</appender>
<!-- 根日誌logger -->
<root level="INFO" name="root">
<!--輸出日誌到檔案-->
<appender-ref ref="FileAppender"/>
<!--控制檯輸出日誌-->
<appender-ref ref="STDOUT"/>
</root>
<!-- 使用者操作日誌logger -->
<logger name="UserLogger" level="INFO" >
<appender-ref ref="UserLogDBAppender"/>
</logger>
</configuration>
其中:ch.qos.logback.core.ConsoleAppender 日誌在控制檯輸出
ch.qos.logback.core.rolling.RollingFileAppender 日誌輸出到檔案
com.grm.logbacktest.logback.TopDBAppender 自定義類,可以實現將日誌插入到自己指定的資料庫
在需要記錄日誌的類中定義
private static final Logger loggerRoot = LoggerFactory.getLogger("root");//root為xml檔案中的root標籤的名字
配合root標籤(在root標籤內新增appender-ref)可以實現將日誌記錄到控制檯和檔案
日誌存入資料庫,logback有預設的DBAppender(所在位置ch.qos.logback.classic.db.DBAppender),如果使用預設的appender的話,存入資料庫的表也是固定的,表結構的sql在ch.qos.logback.classic.db.script包下,裡面有適合的sql檔案。但是如果想要自定義資料庫日誌表的話就不能使用預設的DBAppender,需要自己寫DBAppender
實現寫入自定義資料庫表的功能,核心有TopDBAppender(解析logback-spring.xml時使用),TopLogger(記錄日誌時使用),WebBaseController(web層想要記錄日誌需要繼承這個類)
private static final TopLogger loggerUser = new TopLogger("UserLogger");//UserLogger為xml檔案中logger標籤的名字
使用時UserLog userLog = new UserLog();
userLog.setDescription("日誌記錄資料庫測試");//description自定義的描述資訊
super.info(userLog);
原始碼地址:https://github.com/GRM-RM/logback-test