Logback日志配置

springboot版本2.0.6

1. 配置文件:logback-spring.xml

根據springboot文檔的說法,logback.xml配置文件加載太快,為了使用擴展屬性,應使用logback.xml

Because the standard logback.xml configuration file is loaded too early, you cannot use extensions in it. You need to either use logback-spring.xml or define a logging.config property.

2. 如何使用額外的配置

logback有兩個標簽可以定義變量:property和springProperty

property自定義變量,也可以引用文件

自定義變量:

<property name="USER_HOME" value="/home/sebastien" />

可以引用文件

<property file="src/main/java/chapters/configuration/variables1.properties" />

<- 文件根目錄為resources文件夾 -><property resource="log/logbackproperty.yml"/>

springProperty使用spring屬性

<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"? ? ? ? defaultValue="localhost"/>

因為加載順序的緣故,如果使用application.properties或者application.yml會在項目根目錄產生一個XX_IS_UNDEFINED的文件夾,用于存放日志文件。為避免這種情況出現,應將屬性寫在bootstrap.yml文件內

參考配置 - bootstrap.yml

spring:? application: ?? name: xx ?? logging:? # logback入口文件? config: classpath:logback-spring.xml? # 文件放置文件夾? path: /logs/${spring.application.name}

3. logback-spring.xml - 入口文件

<?xml version="1.0" encoding="UTF-8"?>?<configuration debug="false">? ?? <!-- logback中使用自定義變量 --> ?? <property resource="log/logbackproperty.yml"/>? ?? <!-- 使用bootstrap.yml配置appname --> ?? <springProperty scope="context" name="appname" source="spring.application.name" defaultValue="test"/> ?? <!-- LOG_PATH變量在bootstrap中配置,即logging.path --> ?? ?? <!-- 基礎配置 --> ?? <include resource="log/logback-base.xml"/>? ?? <!-- database配置 --> ?? <include resource="log/logback-database.xml"/>? ?? <root level="INFO" additivity="true"> ? ? ?? <appender-ref ref="STDOUT"/> ? ? ?? <appender-ref ref="ROLLINGFILE"/> ? ? ?? <appender-ref ref="ERROR_FILE"/> ?? </root>?</configuration>

4. logbackproperty.yml -> 自定義logback變量

# 自定義logback變量CHARSET: UTF-8CONSOLE_LOG_PATTERN: %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

5. logback-base.xml -> 基礎配置

<?xml version="1.0" encoding="UTF-8"?><!-- 基礎配置 --><included><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> ? ? ?? <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> ? ? ? ? ?? <level>Debug</level> ? ? ?? </filter> ? ? ?? <encoder> ? ? ? ? ?? <Pattern>${CONSOLE_LOG_PATTERN}</Pattern> ? ? ? ? ?? <charset>UTF-8</charset> ? ? ?? </encoder> ?? </appender>? ?? <!--輸出到文件-->? ?? <!-- 時間滾動輸出 level為 DEBUG 日志 --> ?? <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> ? ? ?? <!-- 正在記錄的日志文件的路徑及文件名 --> ? ? ?? <file>${log.path}/log_debug.log</file> ? ? ?? <!--日志文件輸出格式--> ? ? ?? <encoder> ? ? ? ? ?? <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>${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern> ? ? ? ? ?? <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> ? ? ? ? ? ? ?? <maxFileSize>100MB</maxFileSize> ? ? ? ? ?? </timeBasedFileNamingAndTriggeringPolicy> ? ? ? ? ?? <!--日志文件保留天數--> ? ? ? ? ?? <maxHistory>15</maxHistory> ? ? ?? </rollingPolicy> ? ? ?? <!-- 此日志文件只記錄debug級別的 --> ? ? ?? <filter class="ch.qos.logback.classic.filter.LevelFilter"> ? ? ? ? ?? <level>debug</level> ? ? ? ? ?? <onMatch>ACCEPT</onMatch> ? ? ? ? ?? <onMismatch>DENY</onMismatch> ? ? ?? </filter> ?? </appender>? ?? <!-- 時間滾動輸出 level為 INFO 日志 --> ?? <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> ? ? ?? <!-- 正在記錄的日志文件的路徑及文件名 --> ? ? ?? <file>${log.path}/log_info.log</file> ? ? ?? <!--日志文件輸出格式--> ? ? ?? <encoder> ? ? ? ? ?? <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>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> ? ? ? ? ?? <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> ? ? ? ? ? ? ?? <maxFileSize>100MB</maxFileSize> ? ? ? ? ?? </timeBasedFileNamingAndTriggeringPolicy> ? ? ? ? ?? <!--日志文件保留天數--> ? ? ? ? ?? <maxHistory>15</maxHistory> ? ? ?? </rollingPolicy> ? ? ?? <!-- 此日志文件只記錄info級別的 --> ? ? ?? <filter class="ch.qos.logback.classic.filter.LevelFilter"> ? ? ? ? ?? <level>info</level> ? ? ? ? ?? <onMatch>ACCEPT</onMatch> ? ? ? ? ?? <onMismatch>DENY</onMismatch> ? ? ?? </filter> ?? </appender>? ?? <!-- 時間滾動輸出 level為 WARN 日志 --> ?? <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> ? ? ?? <!-- 正在記錄的日志文件的路徑及文件名 --> ? ? ?? <file>${log.path}/log_warn.log</file> ? ? ?? <!--日志文件輸出格式--> ? ? ?? <encoder> ? ? ? ? ?? <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>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern> ? ? ? ? ?? <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> ? ? ? ? ? ? ?? <maxFileSize>100MB</maxFileSize> ? ? ? ? ?? </timeBasedFileNamingAndTriggeringPolicy> ? ? ? ? ?? <!--日志文件保留天數--> ? ? ? ? ?? <maxHistory>15</maxHistory> ? ? ?? </rollingPolicy> ? ? ?? <!-- 此日志文件只記錄warn級別的 --> ? ? ?? <filter class="ch.qos.logback.classic.filter.LevelFilter"> ? ? ? ? ?? <level>warn</level> ? ? ? ? ?? <onMatch>ACCEPT</onMatch> ? ? ? ? ?? <onMismatch>DENY</onMismatch> ? ? ?? </filter> ?? </appender>? ?? <!-- 時間滾動輸出 level為 ERROR 日志 --> ?? <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> ? ? ?? <!-- 正在記錄的日志文件的路徑及文件名 --> ? ? ?? <file>${log.path}/log_error.log</file> ? ? ?? <!--日志文件輸出格式--> ? ? ?? <encoder> ? ? ? ? ?? <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>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern> ? ? ? ? ?? <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> ? ? ? ? ? ? ?? <maxFileSize>100MB</maxFileSize> ? ? ? ? ?? </timeBasedFileNamingAndTriggeringPolicy> ? ? ? ? ?? <!--日志文件保留天數--> ? ? ? ? ?? <maxHistory>15</maxHistory> ? ? ?? </rollingPolicy> ? ? ?? <!-- 此日志文件只記錄ERROR級別的 --> ? ? ?? <filter class="ch.qos.logback.classic.filter.LevelFilter"> ? ? ? ? ?? <level>ERROR</level> ? ? ? ? ?? <onMatch>ACCEPT</onMatch> ? ? ? ? ?? <onMismatch>DENY</onMismatch> ? ? ?? </filter> ?? </appender></included>

6. logback-database.xml -> database日志配置

<?xml version="1.0" encoding="UTF-8"?>?<!-- 日志配置 --><included> ?? <logger name="jdbc.sqltiming" level="info"/> ?? <logger name="com.ibatis" level="info"/> ?? <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="info"/> ?? <logger name="com.ibatis.common.jdbc.ScriptRunner" level="info"/> ?? <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" ? ? ? ? ?? level="info"/> ?? <logger name="java.sql.Connection" level="info"/> ?? <logger name="java.sql.Statement" level="info"/> ?? <logger name="java.sql.PreparedStatement" level="info"/> ?? <logger name="java.sql.ResultSet" level="info"/></included>

7. 使用

原則:按需修改

使用默認配置:只需修改bootstrap.yml內spring.application.name - 即服務名稱

windows系統需修改bootstrap.yml內logging.path - 即文件存放路徑

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容