目录
配置详解
1、父标签configuration
2、两种属性标签
3、三个节点标签
3.1、append节点标签
3.2、root节点标签
3.3、logger节点标签
3.4、logger和root的关系
4、完整日志配置
logback在springboot中有内置的存在,当然也可以再重新引用依赖,但是没必要。logback框架可以控制日志日志的打印级别、打印内容、还可以实现error级别日志报警,将其发送到指定邮箱或者钉钉。
配置详解
在配置文件中,按标签的级别来分,有一个父标签,两种属性标签和和三种节点标签。分别是
一个父标签:configuration 两种属性:contextName和property 三个节点:appender、root、logger
springboot配置文件的加载顺序->->
1、父标签configuration
configuration最外层标签,该标签有三个属性:
- scan
当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true - scanPeriod
设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 - debug
当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
<configuration scan="true" scanPeriod="10 seconds" debug="true">
</configuration>
2、两种属性标签
contextName和property是处于第二层的标签。
contextName
<contextName>
标签用于指定日志上下文的名称。日志上下文是Logback框架中的一个重要概念,它表示一个独立的日志实例或日志环境。通过设置不同的上下文名称,您可以创建并配置多个独立的日志记录器,每个日志记录器可以有自己的日志级别、输出目标等配置。
<configuration scan="false" scanPeriod="60 seconds" debug="false">
<contextName>logback_demo</contextName>
</configuration>
property
用来定义变量值的标签, 有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。
<property name="log-path" value="" />
3、三个节点标签
三个节点标签分别是append、logger、root
3.1、append节点标签
这个标签属于核心标签,用于定义日志的输出目标。它指定了日志消息将发送到哪里,例如控制台、文件、数据库等。
标签属性:
- name:指定appender的名称,应该是唯一的。
- class:指定appender的实现类。例如,
表示控制台输出,
表示文件输出。
- 其他属性:具体取决于所选的appender类,例如文件路径、文件滚动策略等。
控制台输出时子标签:
- <filter>:标签用于配置日志事件过滤器,可以根据特定的条件过滤和控制日志输出。
- <encoder>:ancoder的意思是追加器,在这里可以理解为渲染器,用来指定日志输出的格式。
- <rollingPolicy> :日志记录器的滚动策略,按日期,按大小记录,只有在输出到文本中时才需要配置这个。
控制台打印示例:
<!--0. 日志格式和颜色渲染 -->
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="" />
<conversionRule conversionWord="wex" converterClass="" />
<conversionRule conversionWord="wEx" converterClass="" />
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN" value="%green(%d{yyyy-MM-dd HH:mm:}) [%thread] %highlight(%-5level) %red(%logger{50}) - %yellow(%msg) %n"/>
<!--1. 输出到控制台-->
<appender name="CONSOLE" class="">
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
<filter class="">
<level>debug</level>
</filter>
<encoder>
<!-- %d表示时间
%thread表示线程名
%-5level 表示日志级别,允许以五个字符长度输出
%logger{50}表示具体的日志输出者,比如类名,括号内表示长度
%msg表示具体的日志消息,就是("xxx")中的xxx
%n表示换行 -->
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
输出到文本时示例:
<!--2. 输出到文档-->
<!-- 2.1 level为 DEBUG 日志,时间滚动输出 -->
<appender name="DEBUG_FILE" class="">
<!-- 正在记录的日志文档的路径及文档名 -->
<file>${}/web_debug.log</file>
<!--日志文档输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="">
<!-- 日志归档 -->
<!--如果第二天输出日志,会将当天的日志记录在<file>${}/log_debug.log</file>,然后将昨天的日志归档到下面的文件中-->
<!--以天切分 %d{yyyy-MM-dd}-->
<fileNamePattern>${}/web-debug-%d{yyyy-MM-dd}.%</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="">
<!--单个日志文件最大100M,到了这个值,就会再创建一个日志文件,日志文件的名字最后+1-->
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文档保留天数-->
<maxHistory>15</maxHistory>
<!--所有的日志文件最大20G,超过就会删除旧的日志-->
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<!-- 此日志文档只记录debug级别的及以上 -->
<filter class="">
<!-- 此日志文件只记录debug级别的
onMatch和onMismatch都有三个属性值,分别为Accept、DENY和NEUTRAL
onMatch="ACCEPT" 表示匹配该级别及以上
onMatch="DENY" 表示不匹配该级别及以上
onMatch="NEUTRAL" 表示该级别及以上的,由下一个filter处理,如果当前是最后一个,则表 示匹配该级别及以上
onMismatch="ACCEPT" 表示匹配该级别以下
onMismatch="NEUTRAL" 表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的
onMismatch="DENY" 表示不匹配该级别以下的 -->
<level>debug</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
3.2、root节点标签
该标签的作用就是指定都启用那个append,可以指定多个
<!--root配置必须在appender下边-->
<!--root节点是对所有appender的管理,添加哪个appender就会打印哪个appender的日志-->
<!--root节点的level是总的日志级别控制,如果appender的日志级别设定比root的高,会按照appender的日志级别打印日志,-->
<!--如果appender的日志级别比root的低,会按照root设定的日志级别进行打印日志-->
<!--也就是说root设定的日志级别是最低限制,如果root设定级别为最高ERROR,那么所有appender只能打印*别的日志-->
<root level="DEBUG">
<!--<appender-ref ref="append中的名字" /> -->
<appender-ref ref="CONSOLE" />
<appender-ref ref="DEBUG_FILE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="WARN_FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
3.3、logger节点标签
logger与root是相对的,作用范围不同,root相当于是对真个项目做配置,logger就是对项目下某个包或者某个类单独做配置的,
该标签有两个属性
name:用来指定受此loger约束的某一个包或者具体的某一个类。
addtivity:是否向上级loger传递打印信息。默认是true。
<!-- logback为 中的包 -->
<logger name="" level="debug" additivity="false">
<!-- 指定打印配置-->
<appender-ref ref="CONSOLE" />
</logger>
<!-- logback为 这个类 -->
<logger name="" level="INFO" additivity="true">
<appender-ref ref="STDOUT"/>
</logger>
3.4、logger和root的关系
- root和logger是父子的关系。
logger的appender根据参数additivity决定是否要叠加root的appender,logger的级别是其自身定义的级别,和root的级别没什么关系。
- logger对单个包或类添加配置,相当于局部配置,root相当于全局配置
如果logger里面配置了additivity=“false”,就会覆盖root的,只打印一遍;但是additivity=“true”,就会向上层再次传递,不会覆盖,而是打印两遍!
4、完整日志配置
将error日志打印到一个文件中,将其他日志打印到另一个文件夹中
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。
当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds">
<!-- -->
<contextName>util_demo</contextName>
<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 -->
<property name="" value="" />
<!-- scope="context",指定作用范围是整个上下文,name变量的名字,source从配置文件读取值作为变量的值-->
<springProperty scope="context" name="springAppName" source=""/>
<!--0. 日志格式和颜色渲染 -->
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="" />
<conversionRule conversionWord="wex" converterClass="" />
<conversionRule conversionWord="wEx" converterClass="" />
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN" value="%green(%d{yyyy-MM-dd HH:mm:}) [%thread] %highlight(%-5level) %red(%logger{50}) - %yellow(%msg) %n"/>
<!--1. 输出到控制台-->
<appender name="CONSOLE" class="">
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
<filter class="">
<level>debug</level>
</filter>
<encoder>
<!-- %d表示时间
%thread表示线程名
%-5level 表示日志级别,允许以五个字符长度输出
%logger{50}表示具体的日志输出者,比如类名,括号内表示长度
%msg表示具体的日志消息,就是("xxx")中的xxx
%n表示换行 -->
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--2. 输出到文档-->
<!-- 2.1 level为 ERROR 日志,时间滚动输出 -->
<appender name="ERROR_FILE" class="">
<!-- 正在记录的日志文档的路径及文档名 -->
<!-- <file>${}/web_error.log</file>-->
<!--日志文档输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="">
<fileNamePattern>${}/${springAppName}-error-%d{yyyy-MM-dd}.log</fileNamePattern>
<!--日志文档保留天数-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 此日志文档只记录ERROR级别的 -->
<filter class="">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 2.2 level为 除error的日志,时间滚动输出 -->
<appender name="INFO_FILE" class="">
<!-- 正在记录的日志文档的路径及文档名 -->
<!-- <file>${}/web_info.log</file>-->
<!--日志文档输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<!--滚动策略-->
<rollingPolicy class="">
<!--路径-->
<fileNamePattern>${}/${springAppName}-info-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<!-- 此日志文档只记录除ERROR级别以外的 -->
<filter class="">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
</appender>
<!-- 异步输出 -->
<appender name="ASYNC-INFO" class="">
<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<discardingThreshold>0</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>256</queueSize>
<!-- 添加附加的appender,最多只能添加一个 -->
<appender-ref ref="INFO_FILE"/>
</appender>
<appender name="ASYNC-ERROR" class="">
<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<discardingThreshold>0</discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize>256</queueSize>
<!-- 添加附加的appender,最多只能添加一个 -->
<appender-ref ref="ERROR_FILE"/>
</appender>
<!-- 4. 最终的策略 -->
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="ASYNC-ERROR" />
<appender-ref ref="ASYNC-INFO" />
</root>
</configuration>
更详细的介绍参看这两篇博客,我也是看的这两个
配置文件标签(超详解) - 掘金 ()
logback整合Springboot及配置说明_logback-spring和logback同时存在_shanvlang的博客-****博客