前言
今天是2019–8-10,周六,早上醒来打开朋友圈,朋友圈里都在发台风“利奇马”肆虐之后的惨象,我打开窗帘,外面阳光灿烂,庆幸自己所在的城市没有台风,揉了揉眼睛后就转身去煮了两个鸡蛋,再吃了些昨晚买的没吃完的葡萄,然后拿起前几天在广州图书馆借的关于springboot的书。刚好看到springboot的日志输出,但是书里面说的很不详细,不是我想要看的内容,我想学习它,自己公司的项目里也有这样的日志配置,但是自己都看不懂,于是乎,作为一位面向百度编程的初级程序员的我,打开了百度,在搜索输入框输入了“springboot日志配置”。既然学了,就把它记录下来,以后还能温故。嘻嘻。
正文
1 springboot默认日志
springboot在默认情况下,会使用logback来记录日志,并且以info级别及以上输出到控制台中,在我们springboot应用启动的时候,就可以看到对应的日志输出。
2 日志以文件形式输出
在企业开发中,日志的记录尤为重要,是程序员分析bug的重要信息来源,而日志输出到控制台自然没办法收集到日志信息,这就需要我们把日志输出到文件中保存起来,方便我们查看。
在springboot中可以在application.yml中配置logging.config来根据不同的运行环境输出不同的日志,但是用xml的形式配置更加灵活。这里记录的是xml形式配置日志输出。
- xml文件加载
根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:
Logback: logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Log4j: log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
Log4j2: log4j2-spring.xml, log4j2.xml
JDK (Java Util Logging): logging.properties
Spring Boot 官方推荐优先使用带有 -spring 的文件名作为你的日志配置(如使用 logback-spring.xml ,而不是 logback.xml ),命名为 logback-spring.xml 的日志配置文件, spring boot 可以为它添加一些 spring boot 特有的配置项。
默认的命名规则,并且放在 src/main/resources 下面即可
如果你即想完全掌控日志配置,但又不想用 logback.xml 作为 Logback 配置的名字, application.yml 可以通过 logging.config 属性指定自定义的名字:
logging.config=classpath:logging-config.xml
虽然一般并不需要改变配置文件的名字,但是如果你想针对不同运行时 Profile 使用不同的日志配置,这个功能会很有用。
一般不需要这个属性,而是直接在 logback-spring.xml 中使用 springProfile 配置,不需要 logging.config 指定不同环境使用不同配置文件。 springProfile 配置在下面介绍。[^1] - xml文件配置
|
属性 |
|
---|---|---|
root | level | root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性。 level:用来设置打印级别,日志级别有:TRACE,DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不区分大小写,不能设置为INHERITED或者同义词NULL。默认的级别是DEBUG。 可以包含零个或多个元素,标识这个appender将会添加到日志输出中。 |
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<root level="INFO"> <!-- 指定最基础的日志输出级别 -->
<appender-ref ref="console" />
</root>
</configuration>
|
属性 |
|
---|---|---|
configuration | 无 | 每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改,可以通过 %contextName 来打印日志上下文名称,一般来说我们不用这个属性,可有可无。 |
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<contextName>logback_test</contextName><!-- 指定日志输出的上下文名称 -->
<root level="INFO"> <!-- 指定最基础的日志输出级别 -->
<appender-ref ref="console" />
</root>
</configuration>
|
属性 |
|
---|---|---|
property | name value |
用来定义变量值的标签, 有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 |
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<contextName>logback_test</contextName><!-- 指定日志输出的上下文名称 -->
<property name="logback.logdir" value="E:/java/log"/>
<property name="logback.appname" value="testApp"/>
<root level="INFO"> <!-- 指定最基础的日志输出级别 -->
<appender-ref ref="console" />
</root>
</configuration>
|
属性 |
|
---|---|---|
appender | name class |
appender用来格式化日志输出节点,有两个属性name和class,class用来指定输出策略,常用就是控制台输出策略和文件输出策略,name指定这个appender的名称(在root节点中的appender-ref会引用这个name) |
<?xml version="1.0" encoding="UTF-8" ?>
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<contextName>logback_test</contextName><!-- 指定日志输出的上下文名称 -->
<property name="logback.logdir" value="E:/java/log" />
<property name="logback.appname" value="testApp" />
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"><!--输出到控制台 ConsoleAppender -->
<!--展示格式 layout -->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss} %contextName ${logback.appname} [%thread] %-5level %logger{36}.%M %line - %msg%n