java | SpringBoot 配置 logback详解

2020年1月11日 265点热度 0人点赞 0条评论

图片

logback 总述

通常来说, 现在打日志一般会有三个选择, 1, log4j , 2. log4j2 , 3. logback. logback 现在 SpringBoot 中默认是选用 logback 的。其使用 XML 进行配置

logback 官方文档如下:http://logback.qos.ch/manual/index.html

配置文件分段讲解

在 SpringBoot 项目中使用 logback 不需要别的配置,依赖也不需要额外引入,主要是配置文件的编写,在配置文件中,主要有以下几个节点

include

可以引入 jar 包中封装的 logback 配置,通过我们会引用 SpringBoot 包里面的一个默认文件

<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
点开可以看到如下图所示 Spring 帮忙设定一些样式和 logger 级别配置:

图片

property:

可以配置当前配置文件要使用到的变量

这里我们一般会用来定义目录和样式方便下面使用,如下所示

<property name="LOG_PATH" value="${user.home}/logs/java-study"/><property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS}|${LOG_LEVEL_PATTERN:-%5p}|${PID:- }|%t|%X{APP_NAME}|%X{IP}|%X{USER_NAME}|%X{TRACE_ID}|%-40.40logger{39} %line|%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
其中最主要的是 pattern,是日志配置中的灵魂!! 这里是小刀常用的一个格式

%d{yyyy-MM-dd HH:mm:ss.SSS} : 时间,精确到了毫秒

${LOG_LEVEL_PATTERN:-%5p} : 日志级别

PID : 线程号,可以观察到线程复用,对查 ThreadLocal 的问题很有用

%t : 线程名

%X{APP_NAME} : 应用名称,这个变量和下面的 IP, USER_NAME,TRACE_ID 都是通过 MDC 来实现的,在应用程序用通过调用如下所示方法来实现

import org.slf4j.MDC;
MDC.put(TRACE_ID, traceId);

%X{IP} : 调用者的 ip

%X{USER_NAME} : 调用者的姓名

%X{TRACE_ID} : 一个请求跟踪的标识

%-40.40logger{39} : 打日志的类

%line : 在哪一行打的日志

%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx : 日志详情

appender

各种各样的添加方案,通过配置这个,可以选择以大小分隔,或者以时间分隔之类等,可以理解为 Appender 是对日志本身的描述

在实际开发中,定义多少个 appender 需要看项目自己需要,一般来说,我们会定义一个错误日志的 appender , 控制台 appender , 和一个通用的 appender.

  • 错误日志的 appender 如下所示:

<appender name="ERRORLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">    <file>${LOG_PATH}/error.log</file>    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">        <level>ERROR</level>    </filter>    <encoder>        <pattern>${PATTERN}</pattern>        <charset>utf8</charset>    </encoder>    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">        <fileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.log</fileNamePattern>        <!-- 超过180天的备份文件会被删除 -->        <maxHistory>180</maxHistory>    </rollingPolicy></appender>

这里要注意这几个地方:

  1. appender class="ch.qos.logback.core.rolling.RollingFileAppender" 这里可以配置不同的类来输出日志,这里选用了常用的 RollingFileAppender 当达到下面的 rollingPolicy 条件时,可以自动一个新的日志文件输出

  2. filter class="ch.qos.logback.classic.filter.ThresholdFilter" 一个阀值过滤器,只有达到这个阀值的日志才会在这个 appender 中输出

  3. rollingPolicy 和上面的 1 配合使用,有根据大小分割的,也有基于时间来分割的。这里选用了基于时间来分。

  • 控制台日志

控制台日志就很简单,只是在 idea 中和服务器/k8s 的终端上看的

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"  >    <encoder>        <pattern>${PATTERN}</pattern>        <charset>utf8</charset>    </encoder></appender>

logger

这个是和我们应用程序相关的,配置哪个目录的日志使用哪种 appender 来打印

logger 可以和我们 Spring 的环境配合起来使用,如下所示:

<springProfile name="online">    <logger name="cloud.javastudy" level="ERROR" additivity="true">        <appender-ref ref="ERRORLOG"/>    </logger>
<root level="INFO"> <appender-ref ref="APPLICATION"/> <appender-ref ref="CONSOLE"/> </root></springProfile>
<springProfile name="!online"> <logger name="cloud.javastudy" level="DEBUG" additivity="true"> <appender-ref ref="CONSOLE"/> </logger> <root level="INFO"> <appender-ref ref="CONSOLE"/> </root></springProfile>

有几下几点需要注意:

  • springProfile name="online" 这里是和我们 SpringBoot 的 application-online.properties 相对应的,可以用来区分开发/测试/线上环境

  • additivity="true" 这个是配置是否向上传递。如果为 true, 在这个 logger 中打了之后, 还会继续往后匹配,如果为 false,则这个 logger 打了之后就结束了

root

这个是兜底方案,如果对某个目录的日志没有做配置,则使用 root 的方案进行输出

总结

logback 的配置总体来说不算复杂,明确好每个节点的分工,然后根据自己的业务需要来进行配置, 然后边配边观察输出,官方文档非常良心,问题和配置都可以在文档中找到详细说明,加油吧!

图片

4040java | SpringBoot 配置 logback详解

root

这个人很懒,什么都没留下

文章评论