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 - 即文件存放路径