认识LogBack.xml

一、logback的三个主要模块

        1.logback-core:提供基本的日志功能;

        2.logback-classic:建立在logback-core之上,兼容SLF4和log4jAPI,提供一套强大的日志框架;

        3.logback-access:允许通过servlet容器的访问日志功能来记录HTTP请求。

二、优点

        1.性能高:被设计为高性能日志框架,有较低的运行是开销,异步日志记录和可配置的缓冲机制有助于提高性能;

        2.灵活配置:采用xml格式,允许声明式配置日志输出;

        3.丰富的appender;

        4.API简单而强大;

        5.广泛的社区支持。

三、配置文件的基本结构

四、xml配置文件完整示例

        1.同步配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 日志存放路径 -->
 <property name="log.path" value="/data/xjdoc/logs" />
    <!-- 日志输出格式 -->
 <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />

 <!-- 控制台输出 -->
 <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
  <encoder>
   <pattern>${log.pattern}</pattern>
  </encoder>
 </appender>
 
 <!-- 系统日志输出 -->
 <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
     <file>${log.path}/sys-info.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
   <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
   <!-- 日志最大的历史 60天 -->
   <maxHistory>60</maxHistory>
  </rollingPolicy>
  <encoder>
   <pattern>${log.pattern}</pattern>
  </encoder>
  <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
 </appender>
 
 <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
     <file>${log.path}/sys-error.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
   <!-- 日志最大的历史 60天 -->
   <maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>ERROR</level>
   <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
   <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

 <!-- 系统模块日志级别控制  -->
 <logger name="cn.xj" level="info" />
 <!-- Spring日志级别控制  -->
 <logger name="org.springframework" level="warn" />
 
 <!--系统操作日志-->
    <root level="info">
       <appender-ref ref="console" />
        <appender-ref ref="file_info" />
        <appender-ref ref="file_error" />
    </root>

</configuration> 

        2.异步配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 日志存放路径 -->
 <property name="log.path" value="/data/xjdoc/logs" />
    <!-- 日志输出格式 -->
 <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />

 <!-- 控制台输出 -->
 <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
  <encoder>
   <pattern>${log.pattern}</pattern>
  </encoder>
 </appender>
 
 <!-- 系统日志输出 -->
 <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
     <file>${log.path}/sys-info.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
   <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
   <!-- 日志最大的历史 60天 -->
   <maxHistory>60</maxHistory>
  </rollingPolicy>
  <encoder>
   <pattern>${log.pattern}</pattern>
  </encoder>
  <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
 </appender>
 
 <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
     <file>${log.path}/sys-error.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
   <!-- 日志最大的历史 60天 -->
   <maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>ERROR</level>
   <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
   <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="async_file_info" class="ch.qos.logback.classic.AsyncAppender">
        <!--  当队列的剩余容量小于这个阈值并且当前日志level为 TRACE, DEBUG or INFO ,则丢弃这些日志。  -->
        <discardingThreshold>0</discardingThreshold>
        <!--  更改默认的队列的深度,该值会影响性能.默认值为256  -->
        <queueSize>1024</queueSize>
        <!--  新增这行为了打印栈堆信息  -->
        <includeCallerData>true</includeCallerData>
        <!--  添加附加的appender,最多只能添加一个  -->
        <appender-ref ref="file_info"/>
    </appender>
    <appender name="async_file_error" class="ch.qos.logback.classic.AsyncAppender">
        <!--  当队列的剩余容量小于这个阈值并且当前日志level为 TRACE, DEBUG or INFO ,则丢弃这些日志。  -->
        <discardingThreshold>0</discardingThreshold>
        <!--  更改默认的队列的深度,该值会影响性能.默认值为256  -->
        <queueSize>1024</queueSize>
        <!--  新增这行为了打印栈堆信息  -->
        <includeCallerData>true</includeCallerData>
        <!--  添加附加的appender,最多只能添加一个  -->
        <appender-ref ref="file_error"/>
    </appender>
    <appender name="async_file_debug" class="ch.qos.logback.classic.AsyncAppender">
        <!--  当队列的剩余容量小于这个阈值并且当前日志level为 TRACE, DEBUG or INFO ,则丢弃这些日志。  -->
        <discardingThreshold>0</discardingThreshold>
        <!--  更改默认的队列的深度,该值会影响性能.默认值为256  -->
        <queueSize>1024</queueSize>
        <!--  新增这行为了打印栈堆信息  -->
        <includeCallerData>true</includeCallerData>
        <!--  添加附加的appender,最多只能添加一个  -->
        <appender-ref ref="file_debug"/>
    </appender>

    <!-- 系统模块日志级别控制  -->
    <logger name="cn.xj" level="info" />
    <!-- Spring日志级别控制  -->
    <logger name="org.springframework" level="warn" />

 
 <!--系统操作日志-->
    <root level="info">
        <appender-ref ref="console" />
        <appender-ref ref="async_file_info" />
        <appender-ref ref="async_file_error" />
    </root>

</configuration> 

五、xml配置详解

        1.property

<!-- 日志存放路径 -->
 <property name="log.path" value="/data/game/logs" />
    <!-- 日志输出格式 -->
 <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />

        log.path:定义了一个名为log.path的属性,值为/data/game/logs。这个属性可以在配置文件的其他地方通过${log.path}进行引用。这种属性一般用于用于同一管理日志的存放路径,方便修改。

        log.pattern:这个属性可以在也可以用上述方法在别处引用,同一管理日志的输出格式,方便修改。

        · %d{HH:mm:ss.SSS}:输出日志的时间戳,精确到毫秒;

转换模式

结果示例

%d

2024-6-22 16:58:59,812

%date

2024-6-22 16:58:59,812

%date{ISO8601}

2024-6-22 16:58:59,812

%date{HH:mm:ss.SSS}

16:58:59,812

%d{HH:mm:ss.SSS}

16:58:59,812

%date{dd MMM yyyy;HH:mm:ss.SSS}

22 jun.2024;16:58:59,812

        · [%thread]:输出线程名;

        · %-5level:输出日志级别,左对齐占5个字符宽度;

        · %logger{20}:输出logger名称,占20个字符的宽度;

        · [%method,%line]:输出调用方法和行号;

        · %msg:输出日志消息;

        · %n:输出平台特定的换行符。

        2.appender

<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
     <file>${log.path}/sys-info.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
   <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
   <!-- 日志最大的历史 60天 -->
   <maxHistory>60</maxHistory>
  </rollingPolicy>
  <encoder>
   <pattern>${log.pattern}</pattern>
  </encoder>
  <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
 </appender>

        ConsoleAppender(控制台输出):class="ch.qos.logback.ConsoleAppender"

用于将日志输出到控制台,主要用于开发金额调试时观察日志。

        FileAppender(文件输出):class="ch.qos.logback.core.FileAppender"

用于将日志输出到文件,可以配置文件路径、文件名等参数。

        RollingFileAppender(滚动文件输出):class="ch.qos.logback.core.RollingFileAppender"

在FileAppender的基础上支持滚动策略,可以按照一定的规则滚动创建日志文件,例如:按照时间没一天或一个小时将日志输出成文件,并定义文件名为输出时间。

        AsyncAppender(异步输出):class="ch.qos.logback.core.AsyncAppender"

用于异步输出日志,可以提高性能,特别适用于高吞吐的应用,包装其他Appender,将日志记录过程一步执行。

        滚动策略( 元素)

        · TimeBasedRollingPolicy (基于时间的滚动策略):按照一定时间间隔滚动创建新的日志文件,fileNamePattern属性定义了日志文件名的格式,可以包含时间相关的占位符,例如:%d{yyyy-MM-dd}。

        · SizeAndTimeBasedRollingPolicy(基于时间和大小的滚动策略):同时基于时间和文件大小的滚动策略,既可以按照时间滚动,又可以在文件达到一定大小时滚动创建新的日志文件。里面永阳可以使用fileNamePattern来定义文件名。maxFileSize属性定义了每个日志文件的最大大小。

        · FixedWindowRollingPolicy(固定窗口的滚动策略):固定窗口的滚动策略,按照一定的窗口大小滚动创建新的日志文件。

        · SizeBasedTriggeringPolicy(基于大小触发滚动策略):基于文件的大小触发滚动的策略,当当前文件大小达到一定的阈值是触发滚动。

        · TimeBasedFileNamingAndTriggeringPolicy(基于时间的文件命名和触发策略):按照一定的时间间隔和文件名格式触发滚动。

        <encoder>元素:用于配置日志的输出格式,${log.pattern}引用了之前定义的属性。

        <filter>元素:

        · 使用ch.qos.logback.classic.filter.LevelFilter过滤器,仅接受INFO级别的日志记录;

        · onMatch指定匹配时的操作为接受(ACCEPT);

        · onMismatch指定不匹配时的操作为拒绝(DENY)。

        3.logger

    <!-- 系统模块日志级别控制  -->
    <logger name="cn.xj" level="info" />
    <!-- Spring日志级别控制  -->
    <logger name="org.springframework" level="warn" />

        name属性:通常使用类名或者报名来指定Logger;

        level属性:定义日志级别,标配是记录的日志消息级别。可选值包括:

        · TRACE(追踪):最低级别的日志,用于记录程序的详细执行信息,日志量较大,一般不用;

        · DEBUG(调试):用于输出调试信息,有助于定位问题,包含详细的变量信息和方法调用堆栈等;

        · INFO(信息):用于记录一般性的信息,表示程序执行的正常流程。显示重要的运行时信息,通常用于生产环境,没有明确指出日志等级时,默认是INFO级别;

        · WARN(警告):用于记录一些可能需要关注的问题,但不会导致程序失败,表示程序遇到了默写问题和潜在的错误,但是仍然可以执行;

        · ERROR(错误):用于记录程序的错误和异常情况。

        4.root

    <root level="info">
        <appender-ref ref="console" />
        <appender-ref ref="async_file_info" />
        <appender-ref ref="async_file_error" />
    </root>

        level属性:定义了根Logger的默认日志级别,表示整个日志系统的最低输出级别;

        <appender-ref>元素:用于引用一个或多个Appender,将其关联到根Logger,即设置根Logger的输出目的地。可以有多个该元素,表示输出到多个目的地。

  • 28
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

皇正经

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

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

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

打赏作者

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

抵扣说明:

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

余额充值