节点介绍spring-boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback-spring.xml的日志配置文件,spring-boot可以为它添加一些spring-boot特有的配置项。放在 src/main/resources 下面即可,注意:logback.xml加载早于application.yml
- 根节点:configuration
- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
- configuration子节点:appender
appender用来格式化日志输出节点,有两个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略:
- ConsoleAppender:将日志信息打印到控制台上,更加准确的说:使用System.out或者System.err方式输出,主要子标签有:encoder
%date [%thread] %-5level %logger{80} - %msg%n
- RollingFileAppender:FileAppender是RollingFileAppender的父类。即RollingFileAppender继承 FileAppender类。功能:能够动态的创建一个文件。也就是说:到满足一定的条件,就会创建一个新的文 件,然后将日志写入到新的文件中。有两个重要的标签与rolingFileAppender进行交互:RollingPolicy,TriggeringPolicy,主要子标签:file,append,encoder,rollingPolicy,triggerPolicy
../logs/tcs.log ../logs/archive/tcs-StandardVehicleController.%d{yyyy-MM-dd}-%i.zip 100MB 10 false %date [%thread] %-5level %logger{80} - %msg%n false
- appender子节点:prudent
- FileAppender:如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。
- RollingFileAppender:当为true时,不支持FixedWindowRollingPolicy。支持TimebasedRollingPolicy,但是有两个限制:
1:不支持也不允许文件压缩(可以打包成.zip文件但文件后缀需要手动修改)
2:不能设置file属性,必须留空。
- appender子节点:layout和encoder
可以看到appender的子节点layout和encoder都可以输出,都可以将事件转换为格式化后的日志记录,但是控制台输出使用layout,文件输出使用encoder。自从0.9.19版本之后,Fileappender和他的子类是期望使用encoder,不再使用layout。
%d [%thread] %-5level %40logger{40} - %msg%n %date [%thread] %-5level %logger{80} - %msg%n
layout和encoder区别
- encoder:主要工作有两个:①将一个event事件转换成一组byte数组,②将转换后的字节数据输出到文件中。
- encoder组件是在0.9.19版本之后才引进来的。在以前的版本中,appender是使用layout(将一个event事件转换成一个字符串),然后使用【java.io.writer】对象将字符串写入到文件中。
- 自从0.9.19版本之后,Fileappender和他的子类是期望使用encoder,不再使用layout。
- configuration子节点:filter
LevelFilter
如果只是想要 Info 级别的日志,只是过滤 info 还是会输出 Error 日志,因为 Error 的级别高,所以我们使用下面的策略,可以避免输出 Error 的日志ERROR DENY ACCEPT
- configuration子节点:logger
- 用来设置某一个包或者具体的某一个类的日志打印级别以及指定< appender >。
- name:用来指定受此logger约束的某一个包或者具体的某一个类。
- level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特殊值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前logger将会继承上级的级别。
- addtivity:是否向上级logger传递打印信息。默认是true。
- configuration子节点:root
- root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性。level默认是DEBUG。
- level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。
- 可以包含零个或多个元素,标识这个appender将会添加到这个loger。
- configuration子节点:springProfile
多环境配置
springProfile标签允许你自由的包含或排除基于激活Spring profiles配置的一部分
配置模板一
${logPath}/${appName}.log ${logPath}/${appName}.%d{yyyy-MM-dd}.log 30 1GB UTF-8 %d [%thread] %-5level %logger{36} %line - %msg%n ${CONSOLE_LOG_PATTERN}
配置模板二
debug ${CONSOLE_LOG_PATTERN} UTF-8 ${LOG_HOME}/debug.log DEBUG ${LOG_HOME}/debug-%d{yyyy-MM-dd}.%i.log 100MB 30 %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n UTF-8 ${LOG_HOME}/error.log ERROR ${LOG_HOME}/error-%d{yyyy-MM-dd}.%i.log 100MB 30 %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n UTF-8 ${LOG_HOME}/info.log INFO ${LOG_HOME}/info-%d{yyyy-MM-dd}.%i.log 100MB 30 %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n UTF-8
配置模板三
DEBUG ${FILE_LOG_PATTERN} UTF-8 ${LOG_FILE_PATH}/debug/${APP_NAME}-%d{yyyy-MM-dd}-%i.log ${LOG_FILE_MAX_SIZE:-10MB} ${LOG_FILE_MAX_HISTORY:-30} ERROR ACCEPT DENY ${FILE_LOG_PATTERN} UTF-8 ${LOG_FILE_PATH}/error/${APP_NAME}-%d{yyyy-MM-dd}-%i.log ${LOG_FILE_MAX_SIZE:-10MB} ${LOG_FILE_MAX_HISTORY:-30} DEBUG ${LOG_STASH_HOST}:4560 Asia/Shanghai { "project": "mall", "level": "%level", "service": "${APP_NAME:-}", "pid": "${PID:-}", "thread": "%thread", "class": "%logger", "message": "%message", "stack_trace": "%exception{20}" } ERROR ACCEPT DENY ${LOG_STASH_HOST}:4561 Asia/Shanghai { "project": "mall", "level": "%level", "service": "${APP_NAME:-}", "pid": "${PID:-}", "thread": "%thread", "class": "%logger", "message": "%message", "stack_trace": "%exception{20}" } ${LOG_STASH_HOST}:4562 Asia/Shanghai { "project": "xxx", "level": "%level", "service": "${APP_NAME:-}", "pid": "${PID:-}", "thread": "%thread", "class": "%logger", "message": "%message", "stack_trace": "%exception{20}" } ${LOG_STASH_HOST}:4563 Asia/Shanghai { "project": "xxx", "level": "%level", "service": "${APP_NAME:-}", "class": "%logger", "message": "%message" }
参考文档 NPException



