logback-spring.xml文件的一些记录

logback-spring.xml文件的一些记录
1、 前言在SpringBoot项目开发的过程中一般都是使用Slf4j作为日志门面使用logback作为日志实现。logback日志实现框架需要指定并配置一个配置文件logback-spring.xml2、一些记录logback-spring.xml 配置文件内容以及一些针对配置项的说明都在里面。?xml version1.0 encodingUTF-8? configuration scantrue scanPeriod10 seconds debugfalse !-- 日志级别从低到高分为TRACE DEBUG INFO WARN ERROR FATAL如果设置为WARN则低于WARN的信息都不会输出 -- !-- scan:当此属性设置为true时配置文件如果发生改变将会被重新加载默认值为true -- !-- scanPeriod:设置监测配置文件是否有修改的时间间隔如果没有给出时间单位默认单位是毫秒。当scan为true时此属性生效。默认的时间间隔为1分钟。 -- !-- debug:当此属性设置为true时将打印出logback内部日志信息实时查看logback运行状态。默认值为false。 -- contextNamelogback/contextName !-- name的值是变量的名称value的值是变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后可以使“${}”来使用变量。 -- !-- property namelog.path valueD:/file/logs/crypto/ -- property namelog.path valuelogs/ !-- 彩色日志 -- !-- 配置格式变量CONSOLE_LOG_PATTERN 彩色日志格式 -- !-- magenta:洋红 -- !-- boldMagenta:粗红-- !-- cyan:青色 -- !-- white:白色 -- !-- magenta:洋红 -- !-- %date 时间 -- !-- %-5level 日志级别从左显示5个字符宽度 -- !-- %thread 线程名称-- !-- %file:%line 文件名:行号 -- !-- %logger 日志名字 一般采用日志所在类名或者包名做日志名 -- !-- %msg 日志正文信息 -- !-- %n 换行 -- property nameCONSOLE_LOG_PATTERN value%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |${PID:-} |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)/ !--输出到控制台-- appender nameCONSOLE classch.qos.logback.core.ConsoleAppender !--此日志appender是为开发使用只配置最低级别控制台输出的日志级别是大于或等于此级别的日志信息-- !-- 例如如果此处配置了INFO级别则后面其他位置即使配置了DEBUG级别的日志也不会被输出 -- filter classch.qos.logback.classic.filter.ThresholdFilter levelDEBUG/level /filter encoder classch.qos.logback.classic.encoder.PatternLayoutEncoder Pattern${CONSOLE_LOG_PATTERN}/Pattern !-- 设置字符集 -- charsetUTF-8/charset /encoder /appender !--输出到文件-- !-- 时间滚动输出 level为 DEBUG 的日志 -- appender nameDEBUG_FILE classch.qos.logback.core.rolling.RollingFileAppender !-- 日志文件的路径和文件名称 -- file${log.path}/log_debug.log/file !--DEBUG级别日志文件的输出格式-- encoder classch.qos.logback.classic.encoder.PatternLayoutEncoder pattern%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} - [%thread] - %file:%line - %logger --- %msg%n/pattern charsetUTF-8/charset /encoder !-- 日志记录器的滚动策略按日期按大小记录 -- rollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy !-- 每天日志归档路径以及格式 -- fileNamePattern${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log/fileNamePattern !-- 每个日志文件的最大大小 -- maxFileSize100MB/maxFileSize !--日志文件保留天数-- maxHistory180/maxHistory /rollingPolicy !-- 此日志文件只记录debug级别的 -- filter classch.qos.logback.classic.filter.LevelFilter levelDEBUG/level onMatchACCEPT/onMatch onMismatchDENY/onMismatch /filter /appender !-- 时间滚动输出 level为 INFO 的日志 -- appender nameINFO_FILE classch.qos.logback.core.rolling.RollingFileAppender !-- 日志文件的路径和文件名称 -- file${log.path}/log_info.log/file !--INFO级别日志文件的输出格式-- encoder classch.qos.logback.classic.encoder.PatternLayoutEncoder pattern%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} - [%thread] - %file:%line - %logger --- %msg%n/pattern charsetUTF-8/charset /encoder !-- 日志记录器的滚动策略按日期按大小记录 -- rollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy !-- 每天日志归档路径以及格式 -- fileNamePattern${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log/fileNamePattern !-- 每个日志文件的最大大小 -- maxFileSize100MB/maxFileSize !--日志文件保留天数-- maxHistory180/maxHistory /rollingPolicy !-- 此日志文件只记录info级别的 -- filter classch.qos.logback.classic.filter.LevelFilter levelINFO/level onMatchACCEPT/onMatch onMismatchDENY/onMismatch /filter /appender !-- 时间滚动输出 level为 WARN 日志 -- appender nameWARN_FILE classch.qos.logback.core.rolling.RollingFileAppender !-- 正在记录的日志文件的路径及文件名 -- file${log.path}/log_warn.log/file !--日志文件输出格式-- encoder pattern%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} - [%thread] - %file:%line - %logger --- %msg%n/pattern charsetUTF-8/charset /encoder !-- 日志记录器的滚动策略按日期按大小记录 -- rollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy fileNamePattern${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log/fileNamePattern !-- 每个日志文件的最大大小 -- maxFileSize100MB/maxFileSize !--日志文件保留天数-- maxHistory180/maxHistory /rollingPolicy !-- 此日志文件只记录warn级别的 -- filter classch.qos.logback.classic.filter.LevelFilter levelwarn/level onMatchACCEPT/onMatch onMismatchDENY/onMismatch /filter /appender !-- 时间滚动输出 level为 ERROR 日志 -- appender nameERROR_FILE classch.qos.logback.core.rolling.RollingFileAppender !-- 正在记录的日志文件的路径及文件名 -- file${log.path}/log_error.log/file !--日志文件输出格式-- encoder pattern%msg%n/pattern charsetUTF-8/charset /encoder !-- 日志记录器的滚动策略按日期按大小记录 -- rollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy fileNamePattern${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log/fileNamePattern !-- 每个日志文件的最大大小 -- maxFileSize100MB/maxFileSize !--日志文件保留天数-- maxHistory180/maxHistory /rollingPolicy !-- 此日志文件只记录ERROR级别的 -- filter classch.qos.logback.classic.filter.LevelFilter levelERROR/level onMatchACCEPT/onMatch onMismatchDENY/onMismatch /filter /appender !-- 把所有日志记录到同一个文件中 (1) 根据配置的日志级别进行记录日志,如root标签配置的日志级别是INFO, 则会把INFO, WARN, ERROR 这三个级别的日志都记录到同一个文件中; (2) 这样做的目的是上面的 DEBUG_FILE、INFO_FILE、WARN_FILE和ERROR_FILE分别是只记录DEBUG级别、INFO级别、WARN级别和ERROR级别的日志 大白话就是上述的日志文件中只会出现本级别的日志信息而不会出现其他级别的日志信息。 这就导致一个问题是日志信息被割裂开了不连续了。 所以如果想要一个完整的日志即所有需要的级别的日志都记录到同一个文件中那就使用如下 ALL_FILE 这个配置项;如果不需要这么做就想把每个级别 的日志单独记录到不同的文件中就不需要开启这个。 -- appender nameALL_FILE classch.qos.logback.core.rolling.RollingFileAppender !-- 日志文件的路径和文件名称 -- file${log.path}/log_all.log/file !--日志文件的输出格式-- encoder classch.qos.logback.classic.encoder.PatternLayoutEncoder pattern%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} - [%thread] - %file:%line - %logger --- %msg%n/pattern charsetUTF-8/charset /encoder !-- 日志记录器的滚动策略按日期按大小记录 -- rollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy !-- 每天日志归档路径以及格式 -- fileNamePattern${log.path}/all/log-all-%d{yyyy-MM-dd}.%i.log/fileNamePattern !-- 每个日志文件的最大大小 -- maxFileSize100MB/maxFileSize !--日志文件保留天数-- maxHistory180/maxHistory /rollingPolicy /appender !-- (一) 此处的 levelINFO 控制着全局的异常记录级别。打个比喻如下 1) 此处的root就好比一个大哥控制着整个项目的日志级别大哥在这里说了我现在把你们都开启!(即使用appender-ref 标签开启了 控制台、debug级别的日志文件、info级别的日志文件、warn级别的日志文件、error级别的日志文件、全部级别的日志文件) 日志级别是 INFO! 在项目运行过程中你们各司其职去记录日志吧。 .... 项目开始运行了大家注意了! 2) 先来看 refCONSOLE 的干活逻辑老大开启的全局日志级别是INFO级别我自己配置的是我要在控制台输出DEBUG及以上级别的日志~ 现在老大开启了全局INFO级别的日志那DEBUG级别的日志我肯定是见不到了我只管在控制台输出INFO级别以上的日志就行啦~ 3) 然后来看看 refDEBUG_FILE 的干活逻辑: 我自己配置的是我只负责在log_debug.log 文件中记录 项目运行过程中的 debug 级别日志但是现在老大开启的全局日志级别是INFO级别所以肯定不会有debug级别的日志输出也就不会有debug级别的日志走到我这里来我没活可干~~~ 4) 再来看看 refINFO_FILE 的干活逻辑我自己配置的是我只负责在log_info.log 文件中记录 项目运行过程中的 info 级别日志但是现在老大开启的全局日志级别是INFO级别如果项目在运行过程中出现了info级别的日志我就要开始干活啦我可不管其他级别的日志比如 warnerror级别的日志我一概不关心! 对应配置如下 filter classch.qos.logback.classic.filter.LevelFilter levelINFO/level onMatchACCEPT/onMatch onMismatchDENY/onMismatch /filter 5) refWARN_FILE 和 refERROR_FILE 干活逻辑和 4) 是类似的。 6) 最后来看看 refALL_FILE 的干活逻辑只要项目运行过程中出现了老大开启的全局日志级别INFO 及以上的日志信息我都要在 log_all.log 文件中记录下来! (二) 老大虽然开启了全局的日志记录级别为 INFO. 但是作为下面的小弟也可以选择自己想要记录的哪个级别的日志信息。拿 控制台的输出举例。虽然 rootINFO, 但是如果 CONSOLE 配置如下 filter classch.qos.logback.classic.filter.ThresholdFilter levelERROR/level /filter 那当程序运行过程中出现了 INFO 级别或 WARN 级别的日志我也不会输出到控制台上!, 我只关心ERROR级别的日志即当有ERROR 级别的日志出现时我才会把ERROR级别的日志信息输出到控制台上。 (3) 如果老大哪天看某个小弟不顺眼就可以不开启他。比如今天老大看 CONSOLE 这个小弟不顺眼就把其给注释掉了那么就不会在控制台输出程序运行过程中的日志信息了。但是其他小弟还是按照 (一)中分析的干活逻辑卖命的干活。 -- root levelINFO appender-ref refCONSOLE/ appender-ref refDEBUG_FILE/ appender-ref refINFO_FILE/ appender-ref refWARN_FILE/ appender-ref refERROR_FILE/ appender-ref refALL_FILE/ /root /configuration