Springboot-logback日志管理
概述:
本內容均為查閱網上大牛資料,整理匯總實踐通過后形成的個人筆記,如有相同,實屬正常!!(PS:貴在分享)
1、logback使用的jar版本:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
2、logback日志管理分為文本配置和數據庫配置:
2.1、文本配置
文本配置主要用到SizeAndTimeBasedRollingPolicy,盡量不要用TimeBasedRollingPolicy和SizeBasedTriggeringPolicy組合,否則造成文件無法正確切割;
參考配置:
<!-- 按照每天生成日志文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!--日志文件輸出的文件名--> <FileNamePattern>${LOG_HOME}/taxmgr.log.%d{yyyy-MM-dd}.%i.log</FileNamePattern> <!--日志文件保留天數--> <MaxHistory>30</MaxHistory> <!--日志大小--> <maxFileSize>10MB</maxFileSize> </rollingPolicy> <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> </encoder> </appender>
2.2、數據庫配置
需要新建數據庫表,MySql腳本如下:
BEGIN; DROP TABLE IF EXISTS logging_event_property; DROP TABLE IF EXISTS logging_event_exception; DROP TABLE IF EXISTS logging_event; COMMIT; BEGIN; CREATE TABLE logging_event ( timestmp BIGINT NOT NULL, formatted_message TEXT NOT NULL, logger_name VARCHAR(254) NOT NULL, level_string VARCHAR(254) NOT NULL, thread_name VARCHAR(254), reference_flag SMALLINT, arg0 VARCHAR(254), arg1 VARCHAR(254), arg2 VARCHAR(254), arg3 VARCHAR(254), caller_filename VARCHAR(254) NOT NULL, caller_class VARCHAR(254) NOT NULL, caller_method VARCHAR(254) NOT NULL, caller_line CHAR(4) NOT NULL, event_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ); COMMIT; BEGIN; CREATE TABLE logging_event_property ( event_id BIGINT NOT NULL, mapped_key VARCHAR(254) NOT NULL, mapped_value TEXT, PRIMARY KEY(event_id, mapped_key), FOREIGN KEY (event_id) REFERENCES logging_event(event_id) ); COMMIT; BEGIN; CREATE TABLE logging_event_exception ( event_id BIGINT NOT NULL, i SMALLINT NOT NULL, trace_line VARCHAR(254) NOT NULL, PRIMARY KEY(event_id, i), FOREIGN KEY (event_id) REFERENCES logging_event(event_id) ); COMMIT;
mysql的數據庫鏈接我用的是:alibaba.druid,參考配置如下:
<!--日志異步到數據庫 --> <appender name="logDB" class="ch.qos.logback.classic.db.DBAppender"> <!--日志異步到數據庫 --> <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource"> <!--連接池 --> <dataSource class="com.alibaba.druid.pool.DruidDataSource"> <driverClassName>com.mysql.jdbc.Driver</driverClassName> <url>${LOGDB_URL}</url> <username>root</username> <password>root</password> </dataSource> </connectionSource> </appender>
完整的配置,參考如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/base.xml" /> <!--定義日志文件的存儲地址 勿在 LogBack 的配置中使用相對路徑--> <property name="LOG_HOME" value="/test/log" /> <property name="LOGDB_URL" value="jdbc:mysql://127.0.0.1:3306/logdb?useSSL=false&characterEncoding=UTF-8" /> <!-- 控制臺輸出 --> <appender name="STDOUT" 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> </encoder> </appender> <!-- 按照每天生成日志文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!--日志文件輸出的文件名--> <FileNamePattern>${LOG_HOME}/taxmgr.log.%d{yyyy-MM-dd}.%i.log</FileNamePattern> <!--日志文件保留天數--> <MaxHistory>30</MaxHistory> <!--日志大小--> <maxFileSize>10MB</maxFileSize> </rollingPolicy> <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> </encoder> </appender> <!--日志異步到數據庫 --> <appender name="logDB" class="ch.qos.logback.classic.db.DBAppender"> <!--日志異步到數據庫 --> <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource"> <!--連接池 --> <dataSource class="com.alibaba.druid.pool.DruidDataSource"> <driverClassName>com.mysql.jdbc.Driver</driverClassName> <url>${LOGDB_URL}</url> <username>root</username> <password>root</password> </dataSource> </connectionSource> </appender> <logger name="org.springframework.web" level="INFO"/> <logger name="org.springboot.sample" level="TRACE" /> <!--myibatis log configure--> <logger name="com.apache.ibatis" level="TRACE"/> <logger name="java.sql.Connection" level="DEBUG"/> <logger name="java.sql.Statement" level="DEBUG"/> <logger name="java.sql.PreparedStatement" level="DEBUG"/> <!-- 開發、測試環境 DEBUG INFO--> <springProfile name="dev,test,local"> <logger name="org.springframework.web" level="ERROR"/> <logger name="com.szdbgo" level="IFNO" /> </springProfile> <!-- 生產環境 --> <springProfile name="pro"> <logger name="org.springframework.web" level="IFNO"/> <logger name="com.szdbgo" level="DEBUG" /> </springProfile> <!-- 日志輸出級別 --> <root level="INFO"> <!-- <appender-ref ref="STDOUT" />--> <appender-ref ref="FILE" /> <!--<appender-ref ref="logDB" />--> </root> </configuration>

浙公網安備 33010602011771號