1.配置日志输出到文件
# 输出到指定文件
logging:
file:/logs/application.log
# 输出到指定目录下(会写入到 spring.log 中)
logging:
path: /logs/
当同时存在 logging.path 和 logging.file 时 logging.path 无效
2.优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL
下面这个会打印info以及其上级别的日志(全局)
logging:
level:
root: info
会打印com.vss.service.impl包下warn及以上的日志
logging:
level:
com.vss.service.impl: warn、
3. 自定义日志配置
Spring Boot
官方推荐优先使用带有-spring
的文件名作为你的日志配置(如使用logback-spring.xml
,而不是logback.xml
),默认命名为logback-spring.xml
的日志配置文件,并且放在 src/main/resources
下面(不是其下面的文件夹,默认就在resources下)
如果你即想完全掌控日志配置,但又不想用logback.xml
作为Logback
配置的名字,application.yml
可以通过logging.config
属性指定自定义的名字:
logging.config=classpath:logging-config.xml
3.1根节点<configuration>
- scan:当此属性设置为
true
时,配置文件如果发生改变,将会被重新加载,默认值为true
。 - scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当
scan
为true
时,此属性生效。默认的时间间隔为1分钟。 - debug:当此属性设置为
true
时,将打印出logback
内部日志信息,实时查看logback
运行状态。默认值为false
。
3.2<root>
root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性。
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。
默认是DEBUG。
可以包含零个或多个元素,标识这个appender将会添加到这个loger。
appender用来格式化日志输出节点,有俩个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。
<appender name="consoleLog1" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n </pattern> </encoder> </appender>
<!--指定最基础的日志输出级别--> <root level="WARN"> <!--appender将会添加到这个loger--> <appender-ref ref="consoleLog1"/> </root>
3.3<logger>
<loger>
用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>
。<loger>
仅有一个name
属性,一个可选的level
和一个可选的addtivity
属性。
name
:用来指定受此loger约束的某一个包或者具体的某一个类。level
:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前loger将会继承上级的级别。addtivity
:是否向上级loger传递打印信息。默认是true,true将此loger
的打印信息向上级传递;
第一种:带有loger
的配置,不指定级别,不指定appender
logback-spring.xml
增加 loger
配置如下:
<logger name="com.dudu.controller"/>
<logger name="com.dudu.controller" />
将控制controller
包下的所有类的日志的打印,但是并没用设置打印级别,所以继承他的上级的日志级别“info”
;
没有设置addtivity
,默认为true,将此loger
的打印信息向上级传递;
没有设置appender
,此loger
本身不打印任何信息。<root level="info">
将root
的打印级别设置为“info”
,指定了名字为“console”
的appender
。
当执行com.dudu.controller.LearnController
类的login
方法时,LearnController
在包com.dudu.controller中,所以首先执行<logger name="com.dudu.controller"/>
,将级别为“info”
及大于“info”
的日志信息传递给root
,本身并不打印;root
接到下级传递的信息,交给已经配置好的名为“console”的appender
处理,“console”
appender
将信息打印到控制台;
打印结果如下:
16:00:17.407 logback [http-nio-8080-exec-8] INFO com.dudu.controller.LearnController - 日志输出 info
16:00:17.408 logback [http-nio-8080-exec-8] WARN com.dudu.controller.LearnController - 日志输出 warn
16:00:17.408 logback [http-nio-8080-exec-8] ERROR com.dudu.controller.LearnController -
第二种:带有多个loger
的配置,指定级别,指定appender
logback-spring.xml
增加 loger
配置如下:
<configuration>
...
<!--logback.LogbackDemo:类的全路径 -->
<logger name="com.dudu.controller.LearnController" level="WARN" additivity="false">
<appender-ref ref="console"/>
</logger>
</configuration>
控制com.dudu.controller.LearnController
类的日志打印,打印级别为“WARN
”;additivity
属性为false
,表示此loger
的打印信息不再向上级传递;
指定了名字为“console
”的appender
;
这时候执行com.dudu.controller.LearnController
类的login方法时,先执行<logger name="com.dudu.controller.LearnController" level="WARN" additivity="false">
,将级别为“WARN
”及大于“WARN”的日志信息交给此loger
指定的名为“console
”的appender
处理,在控制台中打出日志,不再向上级root
传递打印信息。
打印结果如下:
16:00:17.408 logback [http-nio-8080-exec-8] WARN com.dudu.controller.LearnController - 日志输出 warn
16:00:17.408 logback [http-nio-8080-exec-8] ERROR com.dudu.controller.LearnController - 日志输出 error
当然如果你把additivity="false"
改成additivity="true"
的话,就会打印两次,因为打印信息向上级传递,logger本身打印一次,root接到后又打印一次。