• SpringBoot整合LogBack一看就懂


    SpringBoot环境为2.2.2.RELEASE。不用导入任何的依赖。yml文件不需要任何的配置。只用在

    Classpath下创建一个logback.xml即可。如果需要自定义文件名或者文件位置,可以在yml中

    配置 logging.config=classpath:logback.xml 

    在代码中使用以下代码获取一个Logger对象,Class参数为当前类对象,方便再日志中打印。

    private final static Logger logger = LoggerFactory.getLogger(FileLogDemo1.class);

    logback的配置文件分为三部分。最外层是<configuration>标签。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <configuration> 
    
    
        <!--    用来定义变量值,它有两个属性name和value,通过<property>定义的值会被插入到logger上下文中,可以使“${}”来使用变量。-->
        <property name="fixedFilePath" value="C:/Users/szwb295/Desktop/"/>
    
        <!--    获取时间戳字符串,他有两个属性key和datePattern-->
        <timestamp key="currentTime" datePattern="yyyyMMddHHmmsss"/>
    
    
        <!--    日志输出格式-->
        <property name="pattern" value="%d %p %X{request_uuid} [%t] [%c] - %m%n"/>
          
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <!--        对记录事件进行格式化。-->
            <encoder>         
                <pattern>${pattern}</pattern>     
            </encoder>
        </appender>
    
    
         
        <appender name="fixedFile" class="ch.qos.logback.core.FileAppender">   
            <!--        被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。 -->
            <file>${fixedFilePath}a.log</file>     
            <!--        对记录事件进行格式化。-->
            <encoder>      
                <pattern>${pattern}</pattern>    
            </encoder>
        </appender>
    
    
        <appender name="timeBased" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 如果不填写该属性,则当前活动文件名为 fileNamePattern 建议填写 -->
            <file>C:Usersszwb295DesktopcurrentLog2.log</file>    
            <encoder>      
                <pattern>${pattern}</pattern>    
            </encoder>
    
            <!-- 按天产生文件,备份文件名称规则是 fileNamePattern maxHistory为最大保留天数。该类还有SizeAndTimeBasedRollingPolicy该类可设置每天每个文件最大多少。如果超过可以一天产生多个。 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${fixedFilePath}history.%d{yyyyMMdd}.log</fileNamePattern>
                <maxHistory>3</maxHistory>
            </rollingPolicy>
        </appender>
    
        <logger name="com.dfsn.cloud.consumer.filelog2" level="INFO" additivity="false">
            <appender-ref ref="timeBased"/>
        </logger>
    
    
        <appender name="sizeAndTimeBased" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 如果不填写该属性,则当前活动文件名为 fileNamePattern 建议填写 -->
            <file>C:Usersszwb295DesktopcurrentLog3.log</file>    
            <encoder>      
                <pattern>${pattern}</pattern>    
            </encoder>
    
            <!-- 该类是 TimeBasedRollingPolicy的子类,对于文件体积计算的不是很准确-->
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <fileNamePattern>${fixedFilePath}history.%d{yyyyMMdd}.%i.log</fileNamePattern>
                <maxHistory>1</maxHistory>
                <!-- 每个文件最大体积 超过则产生备份文件-->
                <maxFileSize>50kb</maxFileSize>
                <!-- 每天产生文件的最大体积,超过则删除备份文件 -->
                <totalSizeCap>200kb</totalSizeCap>
            </rollingPolicy>
        </appender>
    
        <logger name="com.dfsn.cloud.consumer.filelog3" level="INFO" additivity="false">
            <appender-ref ref="sizeAndTimeBased"/>
        </logger>
    
    
        <appender name="fixedWindow" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>C:Usersszwb295DesktopcurrentLog1.log</file> 
            <encoder>      
                <pattern>${pattern}</pattern>    
            </encoder>
            <!--RollingFileAppender的另一个模式FixedWindowRollingPolicy,不按照日期,只按照文件大小备份,但是测试发现并没有成功备份。不过这个也不经常用到 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">          
                <fileNamePattern>${fixedFilePath}history2.%d{yyyyMMdd}.%i.log.zip</fileNamePattern>      
                <!-- 最小文件数 -->    
                <minIndex>1</minIndex>   
                <!-- 最大文件数,超过最大数则删除备份文件 -->
                <maxIndex>3</maxIndex>      
            </rollingPolicy>
              
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">    
                <!-- 每个文件最大多体积,超过则备份文件 -->     
                <maxFileSize>100kb</maxFileSize>      
            </triggeringPolicy>
        </appender>
    
    
        <!-- 自定义包,该包中的指定level级别会打印。 additivity不想让传递。也就是说,不会向root标签传递,也就不会被其他的appender打印-->
        <logger name="com.dfsn.cloud.consumer.filelog1" level="ERROR" additivity="false">
            <appender-ref ref="fixedWindow"/>
        </logger>
    
    
        <!-- 日志级别    TRACE < DEBUG < INFO < WARN < ERROR   -->
        <root level="DEBUG">      
            <appender-ref ref="console"/>
            <appender-ref ref="fixedFile"/>
        </root>
    
    
    </configuration>
    View Code

    第一部分

    <properties>标签有 name 和 value 两个属性。用于定义全局属性。可以在其他标签内使用 ${name} 

    的方式引用value值。

    <timestamp>标签的 key 和 datePattern 两个属性。用于定义全局日期字符串。datePattern规定字符串格式。

    第二部分

    <appender>标签规定日志的输入目的地。name 属性为appender的bean名称,不可重复。class为输出模式。

    输出模式分为输出到控制台,文件,或者db,或者网络流。一般的我们将日志输出到文件,控制台。

    ConsoleAppender:将日志输出到控制台。

    FileAppender:将日志输出到固定的文件。

    RollingFileAppender:将日志输出到文件,以不固定的形式。每天生成日志之类的形式。

    在<appender>标签内有固定必须有的标签<encoder>该标签有子标签<pattern>标签内规定要输出的日志格式。

    简单的ConsoleAppender模式只需要规定<encoder>子标签即可。固定的输出源FileAppender则必须要指定另外

    一个标签<file>在标签内写入要输出的文件路径。

    RollingFileAppender动态模式则有其特定的两种模式,在标签<rollingPolicy>的class属性规定模式使用的类。

    1 每天备份文件

    TimeBasedRollingPolicy和SizeAndTimeBasedRollingPolicy模式规定了按照日期备份日志。其中

    SizeAndTimeBasedRollingPolicy是TimeBasedRollingPolicy的子类。TimeBasedRollingPolicy的

    <fileNamePattern>标签指定备份文件的格式。<maxHistory>规定日志保留的天数。如果超过配置

    则删除老的,在改模式下,每天固定产出一个文件,隔天则对改文件备份。而SizeAndTimeBasedRollingPolicy则是多了两个属性<maxFileSize>规定了每个日志

    文件的大小,如果超过规定大小,则产生备份文件。<totalSizeCap>规定了每天最多产生文件的体积。

    如果超出则删除老的,在改模式下,每天可以产出多个文件,但多个文件总大小不能超过<totalSizeCap>否则删除老的。

    2 固定的大小备份文件

    FixedWindowRollingPolicy该模式不会按照日期备份,而是按照每个文件最大体积,如果超过则备份。

    该模式有<fileNamePattern>标签,<maxIndex>标签为最少保留文件数,<maxIndex>为最多保留文件数。

    但改值默认为20,也就是最多保留20个文件。若要修改改值,则需要自定义类,继承FixedWindowRollingPolicy

    重写MAX_WINDOW_SIZE属性,重写getMaxWindowSize()方法。否则一旦超过20个备份文件则删除老的。

    除此之外还需要一个<triggeringPolicy>标签,改标签与<rollingPolicy>平级,用于设置每个文件的最大体积

    在<maxFileSize>标签内。

    一般的我们会使用SizeAndTimeBasedRollingPolicy每天产生备份文件,并规定每个备份文件的大小。

    第三部分

    <logger>标签该标签name属性,规定了哪些包下的日志需要打印。level属性规定了日志级别。additivity如果为false则

    不向上级传递。在标签内有<appender-ref>子标签,该标签的属性 ref为<appender>标签的name值。连接起来就是,logger

    标签规定了哪些包需要被记录日志。以及记录什么级别的日志。将这个规则指定到一个<appender>做对应的输出。

    <root>标签只有一个level属性规定了日志级别。<root>标签是所有<looger>标签的父类,如果有<appender>标签未与

    <logger>标签绑定,则可以在<root>标签内通过<appender-ref>标签通用规定。<logger>标签属性additivity为true则表示

    向<root>标签传递。例如某个包需要打印error级别日志,而<root>标签规定的level为info,则<root>里配置的<appender-ref>

    对应的<appender>则也会打印该error日志。

    除此之外,LogBack还可以向其他目标源输入日志。例如邮箱,数据库。通过继承体系图可以看出。

     

     

  • 相关阅读:
    Java方法命名之“由简入繁”原则
    设置Tomcat的字符编码
    MyBatis之会话Session原理
    SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1fa5519] was not registered for synchronization because synchronization is not active
    python3 驱动 PyMySQL
    win 7 64 安装 MondgoDB 3.4
    Python
    win 7 64 安装 tensorflow
    俞敏洪:2017年上半年我的阅读书单和笔记 转
    阿里巴巴开源产品列表 转
  • 原文地址:https://www.cnblogs.com/zumengjie/p/13256000.html
Copyright © 2020-2023  润新知