本文来写说下logback-spring.xml相关的知识与概念
文章目录
- 概述
- configuration元素
- 定义上下文名称
- 定义变量
- appender组件
概述
对于xml日志文件的配置,大多数人第一次接触时有一种望而生畏的感觉,其实如果仔细分析,会发现核心的部分只有三个元素:appender、logger、root。
通过上图我们可以清晰的了解整个xml文件的元素及功能。
其中configuration是根元素,必须的;logger和root可视为同一类,都是日志组件;logger定义日志从哪里(包)获取以及级别;appender配置日志格式、如何过滤、文件处理等。property和contextName元素,分别用来定义变量和应用上下文名称,非必须。
先通过一个简单的日志模板,从视觉上感受一下:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %
logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="chapters.configuration" level="INFO"/>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
上述实例定义了控制台输出debug级别日志的配置。下面对相关的元素进行逐一讲解。
configuration元素
logback.xml配置文件的基本结构可以描述为configuration元素,包含零个或多个appender元素,后跟零个或多个logger元素,后跟最多一个root元素(也可以没有)。
根元素configuration有三个属性:
- debug:默认为false,若设置为true,则打印出logback内部日志信息。
- scan:默认值为true,若设置为true,配置文件如果发生改变,将会被重新加载。
- scanPeriod:与scan配合使用,当scan为true时,此属性生效,默认的时间间隔为1分钟,设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。如可以设置为scanPeriod="30 seconds"每30秒检测一次。
定义上下文名称
contextName元素,每一个日志组件(logger)都会关联到日志上下文,默认上下文名称是’default’,用于标识应用,如果多个应用输出到同一个地方,就有必要使用%contextName来区别。
上线文的配置直接在configuration元素下:
<configuration>
<contextName>HelloWorld-log</contextName>
</configuration>
经过定义之后,在其他property属性或appender中便可通过“%contextName”来获取和使用该上下文名称了。
定义变量
通过property元素可定义变量。它有name和value两个属性。变量可以使“${name}”来使用变量。作用类似于代码中的常量字符串,定义之后公共地方便可以统一使用。如日志文件名称前缀、日志路径、日志输出格式等。
<configuration>
<property name="log.path" value="./log" />
</configuration>
上面便是定义了日志的根路径的变量。
如果是在Spring或SpringBoot项目当中,想让value值是通过配置文件获取,可使用springProperty来定义。
<springProperty scope="context" name="log.path"
source="catalina.base"/>
其中source指定的catalina.base便是在application.properties当中配置变量。此配置还是比较常用的,可以做到灵活区分环境。
appender组件
appender组件用来定义日志输出格式,日志如何过滤以及日志文件的处理。appender的结构如下:
appender的属性有name和class。name指定appender名称,后面使用该appender是也是通过名称来指定。
class属性指定要实例化的appender类的完全限定名称。appender类默认有以下几种:
- ConsoleAppender:日志输出到控制台,类名ch.qos.logback.core.ConsoleAppender。
- FileAppender:日志输入到文件,类名ch.qos.logback.core.FileAppender。
- RollingFileAppender:滚动记录文件,FileAppender的子类,当符合条件(大小、时间),日志进行切分处理。类名:ch.qos.logback.core.rolling.RollingFileAppender。
appender元素可以包含零个或一个layout元素,零个或多个encoder元素以及零个或多个filter元素。
实战中ConsoleAppender及RollingFileAppender使用较多,若需要自定义如把日志输出到消息队列,可以自定义实现AppenderBase接口。
ConsoleAppender上面已经有示例,主要作用就是将日志输出到控制台,并通过pattern元素指定了输出的格式。下面重点看一下RollingFileAppender的配置。