一般来说,使用logback需要引用下面三个包:
- ch.qos.logback:logback-classic
- org.slf4j:jul-to-slf4j
- org.slf4j:log4j-over-slf4j
不过一般来说,如果你引入了spring boot的starter(org.springframework.boot:spring-boot-starter),那么它会自动引用依赖spring-boot-starter-logging,而它自动包含了上面的三个包。也就是你使用spring boot的时候logback的包是自动引用的。
如何配置
spring boot会自动加载resources目录下的logback.xml(groovy),logback-spring.xml(groovy),spring官方推荐的是后面的一种方式。
例如我们要向项目中添加logback-spring.groovy的配置(xml的配置类似,这里就不赘述了)
首先,添加groovy的依赖:org.codehaus.groovy:groovy-all (xml可以省略这一步)
之后在文件里添加默认的logback信息
import
之后在代码里就可以添加logger来输出了
import
这里顺便说一下,LoggerFactory.getLogger()里面会设置该logger所对应的名字,支持class和String,这一点在之后的配置中十分重要。
pattern
上面文件的pattern规定了输出日志的格式,官方可以查到里面一些关键词的意思,这里捡一些重要的说:
- %c{n} (%lo{n}, %logger{n}) 所对应logger的名字,后面跟长度,如果长度过长会吧前面的包名省略到首字母。
- %C{n}(%class{n}) logger所在class的名字,其他的和上面一样。一般来说logger的名字和所在的class名字最好一样
- %d{pattern} (%date{pattern}) 时间,pattern里可以用分号来指定输出多个
- %L(%line) logger所在文件的行数
- %m(%msg,%message) logger的信息
- %p(%le, %level) 日志等级
- %t(%thread) 线程名
- %X{key:-defaultVal}(%mdc{key:-defaultVal}) MDC信息,MDC也是log4j的东西,也自然可以用在这里
- %ex{depth}(%exception{depth}, %throwable{depth}) 错误信息,默认值是full,也就是全栈打出
制表对齐
- %n 如果长度不够会在左边加空格
- %-n 如果长度不够会在右边加空格
- %.n 如果长度超过会从开头开始截取直到长度对应
- %.-n 如果长度超过会从结尾开始截取直到长度对应
- %n.m 第一种情况和第三种情况结合,1、2和3、4可以任意结合
此外,还可以通过"%black", "%red", "%green","%yellow","%blue", "%magenta","%cyan", "%white", "%gray", "%boldRed","%boldGreen", "%boldYellow", "%boldBlue", "%boldMagenta""%boldCyan", "%boldWhite"和"%highlight"来加颜色。
输出到文件
虽然调试的时候我们可以使用consle来看日志,不过要是线上环境的话不太可能用这个。把写到文件里是一个非常常用的做法。那么怎么设置输出到文件呢?
注意到文件上的appender了吗?只要把appender换成FileAppender就ok了,像这样:
import
那么,能不能 我全都要 呢?
当然可以,你甚至可以使用filter来让不同的appender输出不同的日志
import
切分日志文件
使用RollingFileAppender
import
可以看到相比于FileAppender,RollingFileAppender里面多了一个rollingPolicy的元素。其实RollingFileAppender里需要RollingPolicy和TriggeringPolicy两个策略类型,一个用于决定轮换策略一个用于决定出发策略。但是TimeBasedRollingPolicy继承了这两个策略类型,所以只要设置一个就可以了。
在TimeBasedRollingPolicy里需要设置3个参数:
- fileNamePattern: 分隔出来文件的命名方式,基本上是按时间来区分
- maxHistory: 保留时间,超过这个时间的日志文件会自动删除
- totalSizeCap: 每个单独的日志文件最大大小,如果超过这个大小会自动分割
当然还有其他可以设置的参数(比如压缩策略),具体可以参看TimeBasedRollingPolicy的源代码
自定义appender以及layout
我们可以看到所有的appender都继承了ch.qos.logback.core.Appender这个借口。事实上你只要你的appender继承这个接口之后完成里面的三个函数就可以了,其中最重要的是doAppend(E var1)这个函数,这个函数决定了log事件过来你会怎么处理。重写这个函数就可以了。
不过以上用的appender都是继承OutputStreamAppender,它会将日志信息以流式来处理。只要重现一下append(E var1)这个函数会自动帮你变成流输出。
对应不同环境
我们都知道spring可以通过设置spring.profiles.active的值来让系统指定对应的application配置文件。那么logback怎么做呢?
一种方法是在对应的application配置文件里或者启动时添加参数logging.config(仅限spring boot,其他应用可以使用logback.configurationFile)来指定对应的logback配置文件路径。
另一种方法是在配置文件里面使用springProfile(groovy 暂不支持springProfile,所以只能用xml):
<configuration>