logback日志模块

四、日志框架

Springboot 选择的是SLF4j(日志抽象层)和logback(日志实现类)

(1)使用slf4j的日志绑定流程

  1. 添加slf4j-api的依赖

  2. 使用slf4j的API在项目中进行统一的日志记录

  3. 绑定具体的日志实现框架

  4. slf4j有且仅有一个日志实现框架的绑定(如果出现多个默认使用第一个依赖日志实现)

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.36</version>
    </dependency>
    

img

(2)日志桥接器

桥接器和适配器不能同时部署,适配器指的是项目使用的log4j,由于这个框架开发的时间早于slf4j的日志门面,如果想要通过slf4j的接口实现,需要slf4j-reload4j.jar适配。桥接器指的是,项目本省不是通过slf4j实现,这时候想更换日志框架,那么就需要桥接器,例如log4j-over-slf4j.jar。如果两个同时部署,会造成死循环。

img

(3)配置文件

<?xml version="1.0" encoding="UTF-8" ?>

<configuration>
    <!--
       配置集中管理属性,可以直接该属性的value值,格式:${name}
    -->
    <property name="consolePattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c{10} %F %M %L %thread %m%n"/>
<!--    日志输出格式
            %-5level
            %d{yyyy-MM-dd HH:mm:ss.SSS}
            %c类的完整名称
            %M为method
            %L为行号
            %thread线程名称
            %m或者%msg为信息
            %n换行
-->
    <property name="filePattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c{36} %F %M %L %thread %m%n"/>

<!--定义日志文件保存路径属性-->
    <property name="log_dir" value="log/"/>


<!--    控制台日志输出的appender-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--        控制流输出对象,默认System.out改为System.err-->
        <target>System.err</target>
<!--        日期消息格式配置-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${consolePattern}</pattern>
        </encoder>
    </appender>

<!--    日志文件的输出-->
<!--    <appender name="file" class="ch.qos.logback.core.FileAppender">-->
<!--        <file>${log_dir}/logback.log</file>-->
<!--        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">-->
<!--            <pattern>${pattern}</pattern>-->
<!--        </encoder>-->
<!--    </appender>-->


    <appender name="rollFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log_dir}/roll_logback.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${filePattern}</pattern>
        </encoder>
<!--        指定拆分规则-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--            按照时间和压缩格式声明拆分的文件名-->
            <fileNamePattern>${log_dir}/rolling.%d{yyyy-MM}%i.log</fileNamePattern>
<!--            按照文件大小拆分 -->
            <maxFileSize>100MB</maxFileSize>
        </rollingPolicy>
<!--        日志过滤规则-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

<!--html 格式日志文件的输出-->
    <appender name="htmlFile" class="ch.qos.logback.core.FileAppender">
        <file>${log_dir}/logback.html</file>
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ch.qos.logback.classic.html.HTMLLayout">
                <pattern>%-5level%d{yyyy-MM-dd HH:mm:ss.SSS}%c{36}%F%M%L%thread%m</pattern>
            </layout>
        </encoder>
    </appender>


<!--    异步日志-->
    <appender name="async" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="rollFile"/>
    </appender>
    <appender name="asyncHtml" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="htmlFile"/>
    </appender>


<!--    root logger配置-->
    <root level="ALL">
        <appender-ref ref="console"/>
        <appender-ref ref="async"/>
        <appender-ref ref="asyncHtml"/>
    </root>

<!--    自定义 logger对象,additivity=false 是否继承rootlogger-->
<!--    <logger name="com.sgcc" level="info" additivity="false">-->
<!--        <appender-ref ref="console"/>-->
<!--    </logger>-->
</configuration>
posted @   ymy_banana  阅读(89)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示