springboot-logback.xml详解

logback.xml 文件

主要有:日志的记录器(Longger-标签)、日志输出配置(Appender-标签)

一、日志记录器

主要是我们在代码中,通过注入日志记录器对象,然后打印log
比如: 日志记录器A.info(“xx”) 日志记录器B.error(“xxx”)

二、日志输出配置

指定日志输出到哪里去,日志记录器标签有一个重要的功能就是绑定【日志输出配置】,就是在logback.xml中配置【日志记录器】和【日志输出配置】的绑定关系。

日志输出配置的作用

1、用来配置日志输出的目的地,目的地可以是控制台、文件、远程套接字服务器、数据库等
2、日志输出配置标签下面有个【layout】标签,第一个是负责把事件转换成字符串,第二个是指定日志的输出格式等

三、Logback.xml文件中主要用到的标签

  1. property:定义属性变量
  2. appender:日志输出的目的地
  3. root:根日志对象,设置日志的级别
  4. Layouts(日志输出格式)

四、案例1

1、定义日志记录器BUSILOGGER
2、分别记录到【控制台】和【日志文件】中去
3、日志文件使用异步方式

<!--1、定义日志记录器 BUSILOGGER-->
<logger name="BUSILOGGER" additivity="false">
    <level value="${LOGLEVEL}"/>
    <appender-ref ref="ASYNC_SYSFILE"/>
    <appender-ref ref="STDOUT"/>
</logger>

<!--2、打印到控制台-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="cn.com.xx.component.logback.encoder.PatternLayoutEncoder">
    </encoder>
</appender>

<!--3、打印到日志文件-->
<appender name="SYSFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>../logs/${APPID}.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>../logs/backup/${APPID}-%d{yyyy-MM-dd}.zip</FileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder class="cn.com.xx.component.logback.encoder.PatternLayoutEncoder">
    </encoder>
    <append>true</append>
</appender>
<!--打印到日志文件,使用异步打印-->
<appender name="ASYNC_SYSFILE" class="ch.qos.logback.classic.AsyncAppender">
    <discardingThreshold>0</discardingThreshold>
    <queueSize>512</queueSize>
    <includeCallerData>true</includeCallerData>
    <appender-ref ref="SYSFILE"/>
</appender>

五、案例1解释

1、ConsoleAppender

描述:将日志输出到控制台,默认使用System.out,其中表示对日志进行格式化

例如:把>=DEBUG级别的日志都输出到控制台

<configuration> 
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
  <encoder> 
    <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern> 
  </encoder> 
  </appender> 
  <root level="DEBUG"> 
    <appender-ref ref="STDOUT" /> 
  </root> 
</configuration>

2、RollingFileAppender

将日志滚动的输出到磁盘文件,当满足一定的条件(如文件达到了指定的大小,达到了指定的时间)后,就重命名原日志文件进行归档,并生成新的日志文件用于log写入。如果还设置了一定时间内允许归档的日志文件的最大数量,将对过旧的日志文件进行删除操作。

RollingFile实现日志文件滚动更新,依赖于TriggeringPolicy和RolloverStrategy

1、triggeringPolicy决定是否应该执行rollover的操作,
2、RolloverStrategy定义了应该如何完成rollover。如果RolloverStrategy没有配置的话,RollingFileAppender将使用DefaultRolloverStrategy

TriggeringPolicy有多种触发策略,下面几种用的最多

  1. TimeBasedTriggeringPolicy指定了基于时间的触发策略。
  2. SizeBasedTriggeringPolicy指定了基于文件大小的触发策略

3、AsyncAppender

异步记录日志,支持设置如下参数

  1. queueSize(阻塞队列最大容量)
  2. discardingThreshold(丢弃阈值)
  3. neverBlock

注意:虽然logback推荐使用AsyncAppender,但在使用的时候注意会有性能上的问题

六、案例2

1、定义日志输出配置:MONLOGGER
2、定义日志记录器,通过该记录器绑定日志输出配置

日志输出器
<logger name="MONLOGGER" additivity="false">
    <level value="${LOGLEVEL}"/>
    <appender-ref ref="ASYNC_MONLOGGER"/>  绑定日志输出配置
</logger>
 
日志输出配置
<appender name="ASYNC_MONLOGGER" class="ch.qos.logback.classic.AsyncAppender">
    <discardingThreshold>0</discardingThreshold>
    <queueSize>512</queueSize>
    <includeCallerData>true</includeCallerData>
    <appender-ref ref="MONLOGGER"/>  关联【引用】,也是一个日志输出配置
</appender>

日志输出配置
<appender name="MONLOGGER" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>../logs/${APPID}-monitor.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>../logs/backup/${APPID}.log.%d{yyyy-MM-dd}-monitor.zip</FileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <layout class="cn.com.xx.component.logback.xxxPatternLayout">
            <Pattern>%msg%n</Pattern>
        </layout>
    </encoder>
    <append>true</append>
</appender>

3、代码中使用
那么在代码中,我们只需要通过下面代码就可以拿到logback.xml配置的MONLOGGER日志记录器

private static final Logger BUSILOG = LoggerFactory.getLogger("BUSILOGGER");

然后再通过BUSILOG.info …来进行打印日志。

4、下面详细介绍下案例中xml的配置及其作用

<logger name="MONLOGGER" additivity="false">
    <level value="${LOGLEVEL}"/>
    <appender-ref ref="ASYNC_MONLOGGER"/>
</logger>  
<root level="${LOGLEVEL}">
    <appender-ref ref="ASYNC_SYSFILE"/>
    <appender-ref ref="STDOUT"/>
</root>

也可以等价于下面这种写法

<logger name="MONLOGGER" additivity="false">
    <appender-ref ref="ASYNC_SYSFILE"/>
    <appender-ref ref="STDOUT"/>
    <appender-ref ref="ASYNC_MONLOGGER"/>
</logger> 

appender-ref标签表示引用了哪个日志输出配置

输出配置

<appender name="ASYNC_MONLOGGER" class="ch.qos.logback.classic.AsyncAppender">
    <discardingThreshold>0</discardingThreshold>
    <queueSize>512</queueSize>
    <includeCallerData>true</includeCallerData>
    <appender-ref ref="MONLOGGER"/> 
</appender>

1、class=AsyncAppender表示异步打印日志
2、appender标签有两个必要属性name和class。name指定appender名称,class指定appender的全限定名。
3、discardingThreshold 本文设置为0说明永远不会丢弃日志level TRACE, DEBUG or INFO的日志,只要discardingThreshold>0则当队列快满时候level TRACE, DEBUG or INFO的日志就会丢弃掉
4、queueSize是队列大小
5、discardingThreshold:默认,当队列还剩余 20% 的容量时,会丢弃级别为 TRACE, DEBUG 与 INFO 的日志,仅仅只保留 WARN 与 ERROR 级别的日志。想要保留所有的事件,可以设置为 0
6、includeCallerData: 获取调用者的数据相对来说比较昂贵。为了提高性能,默认情况下不会获取调用者的信息。默认情况下,只有像线程名或者 MDC 这种"便宜"的数据会被复制。设置为 true 时,appender会包含调用者的信息
7、maxFlushTime: 根据所引用 appender 队列的深度以及延迟, AsyncAppender 可能会耗费长时间去刷新队列。当 LoggerContext 被停止时,AsyncAppender stop 方法会等待工作线程指定的时间来完成。使用 maxFlushTime 来指定最大的刷新时间,单位为毫秒。在指定时间
8、内没有被处理完的事件将会被丢弃。这个属性的值的含义与 Thread.join(long) 相同
9、neverBlock: 默认为 false,在队列满的时候appender会阻塞,而不是丢弃信息。设置为true,appender不会阻塞你的应用而会将消息丢弃

<appender name="MONLOGGER" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>../logs/${APPID}-monitor.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>../logs/backup/${APPID}.log.%d{yyyy-MM-dd}-monitor.zip</FileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <layout class="cn.com.xx.component.logback.XxxPatternLayout">
            <Pattern>%msg%n</Pattern>
        </layout>
    </encoder>
    <append>true</append>
</appender>

class=RollingFileAppender 表示当满足一定条件(如文件达到了指定的大小,达到了指定的时间)后,就重命名原日志文件进行归档,并生成新的日志文件用于log写入。如果还设置了一定时间内允许归档的日志文件的最大数量,将对过旧的日志文件进行删除操作。

1<file>:被写入的文件名,可以是相对目录,也可以是绝对目录,上级目录不存在会自动创建

2<append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true3<rollingPolicy> 当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类,"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"是最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。

4<fileNamePattern>:必要节点,包含文件名及“%d”转换符,“%d”可以包含一个java.text.SimpleDateFormat指定的时间格式,如:%d{yyyy-MM}。如果直接使用 %d,默认格式是 yyyy-MM-dd。RollingFileAppender的file字节点可有可无,通过设置file,可以为活动文件和归档文件指定不同位置,当前日志总是记录到file指定的文件(活动文件),活动文件的名字不会改变;如果没设置file,活动文件的名字会根据fileNamePattern 的值,每隔一段时间改变一次。“/”或者“\”会被当做目录分隔符。

5<maxHistory>:可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每个月滚动,且<maxHistory>6,则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除。"ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"是查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动。只有一个节点:

6<maxFileSize>:这是活动文件的大小,默认值是10MB7<prudent>:当为true时,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有两个限制,1不支持也不允许文件压缩,2不能设置file属性,必须留空。

8<triggeringPolicy >: 告知 RollingFileAppender 合适激活滚动。"ch.qos.logback.core.rolling.FixedWindowRollingPolicy" 根据固定窗口算法重命名文件的滚动策略。

9<minIndex>:窗口索引最小值

10<maxIndex>:窗口索引最大值,当用户指定的窗口过大时,会自动将窗口设置为1211<fileNamePattern>:必须包含“%i”例如,假设最小值和最大值分别为12,命名模式为 mylog%i.log,会产生归档文件mylog1.log和mylog2.log。还可以指定文件压缩选项,例如,mylog%i.log.gz 或者 没有log%i.log.zip

12<encoder>:对记录事件进行格式化。负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。PatternLayoutEncoder 是唯一有用的且默认的encoder ,有一个<pattern>节点,用来设置日志的输入格式。使用“%”加“转换符”方式,如果要输出“%”,则必须用“\”对“\%”进行转义。

这篇文章写的很细可以参考下:https://blog.csdn.net/p812438109/article/details/105028051

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1. 添加logback-spring.xml文件 在src/main/resources目录下创建一个名为logback-spring.xml的文件,将下面的代码复制并粘贴进去。 ``` <?xml version="1.0" encoding="utf-8" ?> <configuration> <!-- 确定打印的日志级别 --> <timestamp key="byDay" datePattern="yyyyMMdd" /> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} -%msg%n</pattern> </encoder> </appender> <!-- 输出到本地文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/springboot2.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/springboot2.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} -%msg%n</pattern> </encoder> </appender> <!-- root级别日志处理器 --> <root level="info"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </root> <!-- 配置包日级别日志处理器 --> <logger name="com.example" level="debug" additivity="false"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </logger> </configuration> ``` 2. 配置文件参数 在application.properties或application.yml文件中添加以下参数: - logging.config:指定logback-spring.xml配置文件路径,如果不指定将使用默认的日志配置。 - logging.path:指定日志文件存放路径,必须是一个相对目录。例如:logging.path=log 相当于在项目根目录下创建了一个log文件夹,日志将输出到该文件夹中。如果没有设置该参数,则日志将输出到控制台。 ``` #以配置文件的方式加载日志框架,默认使用logback-spring.xml作为配置文件 logging.config=classpath:logback-spring.xml #指定日志存放的相对路径 logging.path=log ``` 3. 在代码中使用日志输出 在需要输出日志的类中使用注入方式加载日志,在方法中使用对应的日志级别输出日志。 ``` @Component public class TestController { private static final Logger logger = LoggerFactory.getLogger(TestController.class); @RequestMapping("/test") public String test() { logger.debug("这是一条debug日志"); logger.info("这是一条info日志"); logger.warn("这是一条warn日志"); logger.error("这是一条error日志"); return "test"; } } ``` 运行项目,打开控制台或者查看日志文件,可以看到日志已经输出成功。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信仰_273993243

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值