springboot本身内置了日志功能,然而想要输入想要的日志,并且输出到磁盘。
springboot的pom文件会引一个parent
org.springframework.boot
spring-boot-starter-parent
2.0.0.RELEASE
点进去这个parent,会有这个dependency
org.springframework.boot
spring-boot-dependencies
2.0.0.RELEASE
../../spring-boot-dependencies
再点进去
org.springframework.boot
spring-boot-starter-logging
2.0.0.RELEASE
compile
再点,这些都是原有的日志包,所以,不必再引依赖了,直接用就ok了。
ch.qos.logback
logback-classic
1.2.3
compile
org.apache.logging.log4j
log4j-to-slf4j
2.10.0
compile
org.slf4j
jul-to-slf4j
1.7.25
compile
1、官方推荐使用的xml名字的格式是:logback-spring.xml而不是logback.xml,因为带spring后缀的可以使用
通过Profile可以针对不同运行时Profile使用不同的日志配置。
2、在resource下创建logback-spring.xml文件。
(1)Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
(2)Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
(3)Log4j2: log4j2-spring.xml, log4j2.xml
(4)JDK(Java Util Logging):logging.properties
如果你不想使用上面推荐的名字,可以在application.yml中通过logging.config属性来指定自定义的名字
3、configuration根节点
(1)scan,默认值为true,当配置文件发生改变时,是否重新加载
(2)scanPeriod,设置监测配置文件是否修改的时间间隔,当scan为true时,此属性生效,默认时间单位是ms,默认的时间间隔是1分钟。
(3)debug,默认值为false,是否打印logback内部日志信息,用于实时查看logback运行状态。
4、子节点root
root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性。
level用来设置打印级别,大小写无关,trace->debug->info->warn->error->all->off,默认debug
可以包含零个或多个元素,标识这个appender将会添加到这个logger
5、子节点
每个logger都关联到logger上下文,默认上下文名称为“default",但可以使用设置成其他名字,用于区分不同的应用程序的记录。一旦设置,不能修改,保以通过%contextName来打印日志上下文名称,一般来说我们不用这个属性,可有可无。
6、子节点
用来定义变量值的标签,有两个属性,name和value,其中name的值是变量的名称,value的值是变量定义的值,通过定义的值会被插入到logger上下文件中,定义变量后,可以使用${}来使用变量。
7、子节点
appender用来格式化日志输出节点,有两个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。
(1)%d{HH: mm:ss.SSS} 日志输出时间
(2)%thread 输出日志的进程名字,这个Web应用以及异步任务处理中很有用。
(3)%-5level 日志级别,并且使用5个字符左对齐
(4)%logger{36} 日志输出者的名字
(5)%msg 日志消息
(6)%n 平台的换行符
(7)RollingFileAppender
用于切分文件日志
ERROR
DENY
ACCEPT
${logback.logdir}/info.${logback.appname}.log
${logback.logdir}/info.${logback.appname}.%d{yyyy-MM-dd}.log
90
UTF-8
%d [%thread] %-5level %logger{36} %line - %msg%n
Error
${logback.logdir}/error.${logback.appname}.log
${logback.logdir}/error.${logback.appname}.%d{yyyy-MM-dd}.log
90
UTF-8
%d [%thread] %-5level %logger{36} %line - %msg%n
8、子节点
用来设置某一个包或者具体的某一个类的日志打印级别、以及指定
(1)name:用来指定受此logger约束的某一个包或者具体的某一个类。
(2)level:用来设置打印级别,大小写无关。还有一个特殊的值inherited或同义词null,代表强制执行上级的级别,如果未设置此属性,那么当前logger将会继承上级的级别。
(3)additivity:是否向上级logger传递打印信息,默认true。
例子:
没有设置addtivity,默认为true,将此logger的打印信息向上级传递,没有appender,此logger本身不打印任何信息,所以会将日志信息传递给上级,一般为root,再交给root配置好的appender处理。
(4)多环境的日志输出
...
%d{yyyy-MM-dd HH:mm:ss} [%p] [%t] %c - %m%n
${log.path}/${application.name}/info.log
true
${log.path}/${application.name}/%d{yyyy-MM-dd}/info/info-%i.zip
50MB
7
2GB
%d{yyyy-MM-dd HH:mm:ss} [%p] [%t] %c - %m%n
INFO
ACCEPT
DENY
${log.path}/${application.name}/warn.log
true
${log.path}/${application.name}/%d{yyyy-MM-dd}/warn/warn-%i.zip
50MB
15
2GB
%d{yyyy-MM-dd HH:mm:ss} [%p] [%t] %c - %m%n
WARN
ACCEPT
DENY
${log.path}/${application.name}/error.log
true
${log.path}/${application.name}/%d{yyyy-MM-dd}/error/error-%i.zip
50MB
15
2GB
%d{yyyy-MM-dd HH:mm:ss} [%p] [%t] %c - %m%n
ERROR
ACCEPT
DENY