• Logback 入门和配置说明


    Logback 是 Log4j 的改进版本,而且原生支持 SLF4J,Logback 的初始化步骤如下:

    1. 在类路径中查找 logback-test.xml 配置文件
    2. 在类路径中查找 logback.groovy 配置文件
    3. 在类路径中查找 logback.xml 配置文件
    4. 如果都没有找到,那边就是用默认配置,将日志输出到控制台

       

    maven 依赖

    在使用 logback 之前,需要增加相关依赖,slf4j-api 是 slf4j 的核心,定义了简单统一的接口,logback-classic 则是具体的日志实现。

    <dependencies>

    <dependency>

    <groupId>org.slf4j</groupId>

    <artifactId>slf4j-api</artifactId>

    <version>1.7.25</version>

    </dependency>

       

    <dependency>

    <groupId>ch.qos.logback</groupId>

    <artifactId>logback-classic</artifactId>

    <version>1.2.3</version>

    </dependency>

    </dependencies>

       

    日志示例

    • 自动日志配置

      配置最简单的方法就是使用 logback 的默认配置,默认配置是将日志输出到控制台,代码如下:

      package org.lixue.slf4j;

         

      import org.slf4j.Logger;

      import org.slf4j.LoggerFactory;

         

      public class HelloWorld{

      final static Loggerlogger=LoggerFactory.getLogger(HelloWorld.class);

      public static void main(String[]args){

      logger.info("HelloWorld");

      }

      }

         

    • 使用 logback-test.xml 或 logback.xml 自动配置

      在类路径中,创建 logback-test.xml 或 logback.xml 配置文件,并增加配置如下,该配置等价与自动配置:

      <configuration>

      <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

      <!--encoders are assigned the type

      ch.qos.logback.classic.encoder.PatternLayoutEncoderbydefault-->

      <encoder>

      <pattern>%d{HH:mm:ss.SSS}[%thread]%-5level%logger{36}-%msg%n</pattern>

      </encoder>

      </appender>

         

      <rootlevel="debug">

      <appender-ref ref="STDOUT"/>

      </root>

      </configuration>

         

    配置文件说明

    logback 配置文件的语法非常灵活。因此, 不可能用 DTD 文件或 XML 架构指定允许的语法。不过, 配置文件的基本结构可以描述为 configuration 元素,包含零个或多个 appender 元素,后跟零个或多个 logger 元素,,后跟最多一个 root 元素。下图说明了此基本结构。

       

    • configuration 配置

      该配置是配置文件的根节点,主要用于配置文件的读取及调试相关配置,配置如下:

      <configuration scan="true"scanPeriod="60 seconds"debug="false">

      <!--其他配置省略-->

      </configuration>

         

    配置属性

    默认值

    说明

    scan

    true

    配置文件如果发生改变,将会被重新加载

    scanPeriod

    60000

    设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒

    debug

    false

    将打印出logback内部日志信息,实时查看logback运行状态

       

    • logger 配置

      用来设置某一个包或者具体的某一个类的日志打印级别,还可以包括零个或多个 appender 子元素,配置如下:

      <logger name="org.lixue.slf4j" level="info" additivity="false">

      <appender-ref ref="STDOUT"/>

      </logger>

         

    配置属性

    默认值

    说明

    name

      

    某一个包或者具体的某一个类的名称

    level

      

    设置日志打印级别,可用值(不区分大小写) TRACE, DEBUG, INFO, WARN, ERROR, ALL

    additivity

    true

    是否向上级传递打印消息,如果为 true,则会打印多条日志

    appender-ref

      

    定义日志打印的 appender

       

    • root 配置

      和 logger 配置一样,是根 logger,所有没有指定的 logger 都将使用 root 配置,配置如下:

      <root level="debug">

      <appender-ref ref="STDOUT"/>

      </root>

         

    配置属性

    默认值

    说明

    level

      

    设置日志打印级别,可用值(不区分大小写) TRACE, DEBUG, INFO, WARN, ERROR, ALL

    appender-ref

      

    定义日志打印的 appender

       

    • appender 配置

      appender 配置有二个必须属性 name 和 class ,这个 name 属性用来标识 appender ,class 属性用于指定 appender 具体实现类的完整名称。这个 <appender> 元素可以包含零个或一个 <layout>元素,零个或多个 <encoder> 元素,零个或多个 <filter> 元素,下图说明了基本结构:

         

      <layout> 元素必须属性为 class , 指定要实例化的布局类的完全名称。<encoder> 元素必须属性为 class,指定要实例化的编码类的完全名称,appender 的继承关系如下:

         

         

      • ConsoleAppender

        用于将日志打印到控制台输出,或者 System.out 或者 System.err 中输出日志

          <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

        <!-- encoders are assigned the type

                 ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->

        <encoder>

        <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>

        </encoder>

          </appender>

           

      • FileAppender

        FileAppender 是 OutputStreamAppender 的子类,它将日志事件追加到文件中,目标文件由<file> 指定。如果文件已经存在, 则根据<append> 属性的值追加或截断它。

        <appender name="FILE" class="ch.qos.logback.core.FileAppender">

        <file>testFile.log</file>

        <append>true</append>

        <immediateFlush>true</immediateFlush>

        <!--encoders are assigned the type

        ch.qos.logback.classic.encoder.PatternLayoutEncoderbydefault-->

        <encoder>

        <pattern>%-4relative[%thread]%-5level%logger{35}-%msg%n</pattern>

        </encoder>

        </appender>

           

    配置属性

    默认值

    说明

    file

      

    要写入的文件的名称。如果文件不存在, 则创建它,如果文件的父目录不存在,FileAppender 将自动创建它,,包括任何必要但不存在的父目录

    append

    true

    如果为 true, 则会在现有文件的末尾追加事件。否则, 如果追加为 false, 则任何现有文件都将被截断

    immediateFlush

    true

    为 true 表示所有消息都会被立即输出,设为false则不输出

       

    • RollingFileAppender

      RollingFileAppender 扩展了滚动日志文件的功能。例如, 可以记录到名为 log.txt 文件, 并且一旦满足某个条件,将其日志记录目标更改为另一个文件。有两个重要的子组件与 RollingFileAppender 交互。第一个 RollingFileAppender 子组件,即 RollingPolicy 负责执行翻转所需的操作。RollingFileAppender 的第二个子组件, 即 TriggeringPolicy 将确定翻转发生的时间和准确情况。

      <appende rname="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">

      <file>e:/temp/logs/logFile.log</file>

      <append>true</append>

      <immediateFlush>true</immediateFlush>

         

      <rollingPolicy class="">

      <!--其他配置-->

      </rollingPolicy>

         

      <triggeringPolicy class="">

      <!--其他配置-->

      </triggeringPolicy>

         

      <encoder>

      <pattern>%-4relative[%thread]%-5level%logger{35}-%msg%n</pattern>

      </encoder>

      </appender>

         

    配置属性

    默认值

    说明

    file

      

    要写入的文件的名称。如果文件不存在, 则创建它,如果文件的父目录不存在,FileAppender 将自动创建它,,包括任何必要但不存在的父目录

    append

    true

    如果为 true, 则会在现有文件的末尾追加事件。否则, 如果追加为 false, 则任何现有文件都将被截断

    immediateFlush

    true

    为 true 表示所有消息都会被立即输出,设为false则不输出

    rollingPolicy

      

    负责执行翻转所需的操作

    triggeringPolicy

      

    确定翻转发生的时间和准确情况

       

    • RollingPolicy
      • TimeBasedRollingPolicy

        可能是最受欢迎的滚动策略。具体实现类为 ch.qos.logback.core.rolling.TimeBasedRollingPolicy, 它根据时间 (例如按天或按月) 定义翻转策略,TimeBasedTriggeringPolicy 实现了 RollingPolicy 和 TriggeringPolicy 接口。

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

        <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>

        <maxHistory>30</maxHistory>

        <totalSizeCap>3GB</totalSizeCap>

        </rollingPolicy>

           

    配置属性

    默认值

    说明

    fileNamePattern

      

    定义了已滚动 (存档) 日志文件的名称,其值应由文件的名称以及适当放置的%d{yyyy-MM-dd}转换说明符组成。%d转换说明符可能包含由类指定的日期和时间模式(使用 java.text.SimpleDateFormat);如果配置了 <file> 元素值,则该配置不生效;如果希望启用压缩,则只需要修改 fileNamePattern 以 .gz 或 .zip 结尾。

    maxHistory

      

    保留的最大存档文件数, 异步删除旧文件。例如, 如果指定每月翻转, 并将 maxHistory 设置为 6, 则6月的存档文件将保存在删除了6月以上的文件中。注意当删除旧的存档日志文件时, 为日志文件存档而创建的任何文件夹都将删除

    totalSizeCap

      

    控制所有存档文件的总大小。超过了总大小上限时, 将异步删除最旧的存档。totalSizeCap属性还需要设置 maxHistory 属性,maxHistory 为第一限制,而 totalSizeCap 为第二限制

    cleanHistoryOnStart

    false

    如果设置为 true,,将在 appender 启动时执行存档删除

       

    • SizeAndTimeBasedRollingPolicy

      您可能希望将文件实质上按日期存档,但同时限制每个日志文件的大小,特别是在后期处理工具对日志文件施加大小限制时。该滚动策略就是为了满足这一要求而实现的,具体实现类为 ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy 。

      <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">

      <fileNamePattern>e:/temp/logs/mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>

      <maxFileSize>1MB</maxFileSize>

      <maxHistory>5</maxHistory>

      <totalSizeCap>20GB</totalSizeCap>

      </rollingPolicy>

         

    配置属性

    默认值

    说明

    fileNamePattern

      

    定义了已滚动 (存档) 日志文件的名称,其值应由文件的名称以及适当放置的%d{yyyy-MM-dd}转换说明符和 %i 组成。%d转换说明符可能包含由类指定的日期和时间模式(使用 java.text.SimpleDateFormat);%i 转换说明符是递增的索引 (从0开始);如果希望启用压缩,则只需要修改 fileNamePattern 以 .gz 或 .zip 结尾;

    maxHistory

      

    保留的最大存档文件数, 异步删除旧文件。例如, 如果指定每月翻转, 并将 maxHistory 设置为 6, 则6月的存档文件将保存在删除了6月以上的文件中。注意当删除旧的存档日志文件时, 为日志文件存档而创建的任何文件夹都将删除

    totalSizeCap

      

    控制所有存档文件的总大小。超过了总大小上限时, 将异步删除最旧的存档。totalSizeCap属性还需要设置 maxHistory 属性,maxHistory 为第一限制,而 totalSizeCap 为第二限制

       

    • FixedWindowRollingPolicy

      您可能希望将文件在固定范围索引内滚动,该滚动策略就是为了满足这一要求而实现的,具体实现类为 ch.qos.logback.core.rolling.FixedWindowRollingPolicy ,由于该策略没有定义翻转发生的时间和准确情况,因此还需要配置 triggeringPolicy 来定义翻转发生的时间和准确情况。

      <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">

      <fileNamePattern>e:/temp/logs/fixedRollingPolicy.%i.log.zip</fileNamePattern>

      <minIndex>1</minIndex>

      <maxIndex>3</maxIndex>

      </rollingPolicy>

         

    配置属性

    默认值

    说明

    fileNamePattern

      

    选项表示在重命名日志文件时将遵循的模式。它必须包含字符串 %i,它将指示将插入当前窗口索引的值的位置

    minIndex

      

    表示索引的下限

    maxIndex

      

    表示索引的上界

       

    示例:固定翻转策略的一个更具体的例子。假设,minIndex设置为1, maxIndex设置为 3, fileNamePattern属性设置为 foo%i. log, 并且文件属性设置为 foo.log

    翻转次数

    主动输出目标

    存档的日志文件

    描述

    0

    foo.log

    -

    尚未发生翻转, logback 登录到初始文件。

    1

    foo.log

    foo1.log

    第一次翻转。foo.log被重命名为foo1.log。创建一个新的foo.log文件, 并成为活动输出目标。

    2

    foo.log

    foo1.log, foo2.log

    第二次翻转。foo1.log被重命名为foo2.logfoo.log被重命名为foo1.log。创建一个新的foo.log文件, 并成为活动输出目标。

    3

    foo.log

    foo1.log, foo2.log, foo3.log

    第三次翻转。foo2.log被重命名为foo3.logfoo1.log被重命名为foo2.logfoo.log被重命名为foo1.log。创建一个新的foo.log文件, 并成为活动输出目标。

    4

    foo.log

    foo1.log, foo2.log, foo3.log

    在此和随后的几轮中, 翻转将首先删除foo3.log。其他文件通过递增索引来重命名, 如前面的步骤所示。在此和随后的翻转中, 将有三个存档日志和一个活动日志文件。

       

    • TriggeringPolicy
      • SizeBasedTriggeringPolicy

        查看当前活动文件的大小。如果文件超出指定的大小, 它将发出信号, 表示拥有的触发器会触发现有活动文件的翻转,具体实现类为 ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy

        <triggeringPolicyclass="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">

        <maxFileSize>5MB</maxFileSize>

        </triggeringPolicy>

           

    配置属性

    默认值

    说明

    maxFileSize

    10M

    设置文件翻转的文件大小。通过使用KB、 MB和分别为GB的数值在数字值, 可以指定 maxFileSize 选项的字节、千字节、mb 或 gb。例如, 5000000、 5000KB、 5MB和2GB都是有效值

    • encoder 配置

      负责将传入事件转换为字符串的组件,如果不指定 class 属性,则使用默认实现类 ch.qos.logback.classic.encoder.PatternLayoutEncoder

      <encoder>

      <pattern>%d{HH:mm:ss.SSS}[%thread]%-5level%logger{36}-%msg%n</pattern>

      </encoder>

         

    配置属性

    默认值

    说明

    pattern

      

    转换模式由文本和格式控制表达式 (称为转换说明符) 组成。您可以自由地在转换模式中插入任何文本。每个转换说明符以百分比符号 "%" 开头, 后跟可选的格式修饰符、转换字和大括号之间的可选参数。转换词控制要转换的数据字段, 例如记录器名称、级别、日期或线程名称。格式修饰符控制字段宽度、填充和左或右对齐。

    %logger{长度}:在日志记录事件的输出记录器的名称

    %d{格式}:用于输出日志记录事件的日期和时间

    转换模式

    结果

    %d

    2006-10-20 14:06:49,812

    %date

    2006-10-20 14:06:49,812

    % date{ISO8601}

    2006-10-20 14:06:49,812

    %date {HH:mm:ss.sss}

    14:06:49.812

    %dateHH:mm:ss.sss}

    20061020; 14:06:49.812

    %F 或 %file:输出发出日志记录请求的 Java 源文件的文件名,生成文件信息的速度并不特别快。因此, 除非执行速度不是问题, 否则应避免使用它。

    %caller{深度}:输出生成日志记录事件的调用方的位置信息。位置信息取决于 JVM 实现, 但通常包括调用方法的完全限定名, 后跟调用方的源、文件名和括号之间的行号。可以将整数添加到调用方转换说明符的选项中, 以配置要显示的信息的深度。

    %L 或 %line:输出记录请求发出位置的行号。生成行号信息的速度并不特别快。因此, 除非执行速度不是问题, 否则应避免使用它

    %m、%msg 或 %message:输出与日志记录事件关联的应用程序提供的消息

    %M 或 %method:输出发出日志记录请求的方法名称。生成方法名称的速度并不特别快。因此, 除非执行速度不是问题, 否则应避免使用它。

    %n:与平台相关的换行符

    %level:日志事件级别

    %thread:输出生成日志记录事件的线程的名称

    %ex{深度}:输出与日志记录事件关联的异常的堆栈跟踪 (如果有)。默认情况下, 将输出完整的堆栈跟踪

    转换模式

    结果

    %ex

    mainPackage.foo.bar.TestException: Houston we have a problem
    at mainPackage.foo.bar.TestThrower.fire(TestThrower.java:22)
    at mainPackage.foo.bar.TestThrower.readyToLaunch(TestThrower.java:17)
    at mainPackage.ExceptionLauncher.main(ExceptionLauncher.java:38)

    %ex{short}

    mainPackage.foo.bar.TestException: Houston we have a problem
    at mainPackage.foo.bar.TestThrower.fire(TestThrower.java:22)

    %ex{full}

    mainPackage.foo.bar.TestException: Houston we have a problem
    at mainPackage.foo.bar.TestThrower.fire(TestThrower.java:22)
    at mainPackage.foo.bar.TestThrower.readyToLaunch(TestThrower.java:17)
    at mainPackage.ExceptionLauncher.main(ExceptionLauncher.java:38)

    %ex{2}

    mainPackage.foo.bar.TestException: Houston we have a problem
    at mainPackage.foo.bar.TestThrower.fire(TestThrower.java:22)
    at mainPackage.foo.bar.TestThrower.readyToLaunch(TestThrower.java:17)

      

      

      

       

  • 相关阅读:
    程序中不要出现标识符完全相同的局部变量和全局变量
    不要出现仅靠大小写区分的相似的标识符
    程序中不要出现仅靠大小写区分的相似的标识符
    命名规则尽量与所采用的操作系统或开发工具的风格保持一致
    标识符的长度应当符合“min-length && max-information”原则
    标识符应当直观且可以拼读,可望文知意,不必进行“解码”
    当代码比较长,特别是有多重嵌套时,应当在一些段落的结束处加注释
    注释的位置应与被描述的代码相邻
    尽量避免在注释中使用缩写
    注释应当准确、易懂,防止注释有二义性
  • 原文地址:https://www.cnblogs.com/li3807/p/8732776.html
Copyright © 2020-2023  润新知