• loback的介绍与配置-(通俗易通)


    一.logback的配置介绍

      Logback的配置分为三个内容:Loggerappenderlayout

      Logger作为日志的记录器,主要用于存放日志对象,也可以定义日志类型、级别。

      appender:主要用于指定日志输出的目的地目的地可以是控制台、文件、远程套接字服务器、 MySQLPostreSQLOracle和其他据库、 JMS和远程UNIX Syslog守护进程等。 

      Layout:负责把事件转换成字符串,格式化日志信息的输出.

     二.Logger context的介绍

      各个logger都会被关联到一个LoggerContext上,LoggerContext负责制造logger,也负责以树结构排列各logger.所有的logger都是通过org.slf4j.LoggerFactory类的静态方法getLogger取得。

    private Logger logger = LoggerFactory.getLogger(Example.class);

     三.Logger级别的打印与规则设置

    日志级别分为:
        TRACE(跟踪) < DEBUG < INFO < WARN < ERROR

    如果
    Logger没有被分配级别,那么它将继承root的默认级别:DEBUG

    打印方法决定记录请求的级别。例如,如果 L 是一个 logger 实例,那么,语句 L.info("..")是一条级别为 INFO的记录语句。记录请求的级别在高于或等于其 logger 的有效级别时被称为被启用,否则,称为被禁用。 

    记录请求级别为 p,其 logger的有效级别为 q,只有则当 p>=q时,该请求才会被执行。
    该规则是 logback 的核心。级别排序为: TRACE < DEBUG < INFO < WARN < ERROR

     四.Logback的默认配置 

    Logback启动后,会在classpath下查找文件logback-test.xml,如果文件不存在会查找logback.xml文件,如果这2个文件都不存在,logbackBasicConfigUrator自动对自己进行配置,这样会导致记录输出到控制台上。

     五.logback.xml常用配置详解

      1.根节点<configuration>的配置

    <configuration scan="true" scanPeriod="60 seconds" debug="false"> 
        <!--其他配置省略--> 
    </configuration>
    scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
    scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
    debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

       2.子节点<contextName>

        作用:用来设置上下文名称,每个logger都关联到logger上下文,默认上下文名称为default。但可以使用<contextName>设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。

    <configuration scan="true" scanPeriod="60 seconds" debug="false"> 
         <contextName>myAppName</contextName> 
        <!--其他配置省略-->
    </configuration>   

       3.子节点<property>

         作用:用来定义变量值,它有两个属性namevalue,通过<property>定义的值会被插入到logger上下文中,可以使”${}”来使用变量。

    <configuration scan="true" scanPeriod="60 seconds" debug="false"> 
       <property name="APP_Name" value="myAppName" /> 
             name: 变量的名称
            value: 的值时变量定义的值 
         <contextName>${APP_Name}</contextName> 
       <!--其他配置省略--> 
    </configuration>    

       4.子节点<timestamp>

        作用:获取时间戳字符串,他有两个属性keydatePattern

    <configuration scan="true" scanPeriod="60 seconds" debug="false"> 
      <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>
               key: 标识此<timestamp> 的名字;
               datePattern: 设置将当前时间(解析配置文件的时间)转换为字符串的模式,遵循java.txt.SimpleDateFormat的格式。
      <contextName>${bySecond}</contextName> 
      <!-- 其他配置省略--> 
    </configuration>    

      5.子节点<appender>

        作用:负责写日志的组件,它有两个必要属性nameclassname指定appender名称,class指定appender的全限定名,name的不同,也决定了这个appender的作用不同

      5.1class为:ConsoleAppender时,表示要将日志打印到控制台,有以下属性

        <encoder>:对日志进行格式化

         <target>:字符串System.out(默认)或者System.err(区别不多说了)

    <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>

    此配置表示: 把 >= DEBUG 级别的日志都输出到控制台上

       5.2 classFileAppender时:表示把日志添加到文件中。有以下属性

         <file>:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。

         <append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true

         <encoder>:对记录事件进行格式化.负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。

         <prudent>:如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false(如果设置成了true其它的FileAppender也可以向该文件中写,就是速度慢) 

    <configuration> 
      <appender name="FILE" class="ch.qos.logback.core.FileAppender"> 
        <file>testFile.log</file> 
        <append>true</append> 
        <encoder> 
              <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
        </encoder> 
      </appender> 
      <root level="DEBUG"> 
        <appender-ref ref="FILE" /> 
      </root> 
    </configuration>
    上述配置表示: 把>=DEBUG级别的日志都输出到testFile.log

       5.3classRollingFileAppender:表示滚动记录文件,先将日志记录到指定的文件上,当符合某个条件时,会将日志记录到其它文件上。有以下属性:

        <file>:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。

         <append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true

         <rollingPolicy>:当发生滚动时,会根据class定义的滚动策略来决定RollingFileAppender的行为,可能是文件移动和重命名。

         在这里请注意:FollingFileAppender下的rollingPolicy策略有4种,这里只介绍一种最常用的SizeAndTimeBasedRollingPolicy

        当rollingPolicy的class为SizeAndTimeBasedRollingPolicy:表示按照文件的大小和日期生成日志文件

          <fileNamePattern>:生成文件的名字

          <maxFileSize>  :生成文件的大小

          <maxHistory>   :保存日志文件的日期,以天为单位

          <totalSizeCap>  :保存日志的最大容量

      注意:在配置<fileNamePattern>时,按日期格式化的配置 .%d{yyyy-MM-dd}.%i 是不能更改的,否则会失效

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="true" scanPeriod="60 seconds" debug="false">
        <property name="LOG_HOME" value="D:logs" />
        <!-- 滚动记录文件 -->
        <appender name="metrics" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_HOME}metrics.log</file> 
            <append>true</append>
            <!-- 每天创建1个日志 文件,当超过1MB时创建新的文件-->
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy" >
                <fileNamePattern>${LOG_HOME}metrics.%d{yyyy-MM-dd}.%i.log</fileNamePattern>  <!-- 注意标红这里是不能更改的,必须包含的元素 -->
                <maxFileSize>1MB</maxFileSize>
                <maxHistory>30</maxHistory>
                <totalSizeCap>3GB</totalSizeCap> 
            </rollingPolicy>
            <encoder> 
                      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n|==|%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
            </encoder>      
        </appender>
        <logger name="metrics.zpb" level="info" additivity="false">
            <appender-ref ref="metrics"/>
        </logger>
        <root level="INFO">
            <appender-ref ref="metrics"/>
        </root>
    </configuration>

      6.子节点<loger>

        作用:用来设置打印哪一个包下的日志或者某一具体类的日志,以及打印的级别,以及指定<appender>

        <loger>仅有一个name属性,一个可选的level和一个可选的addtivity属性

        name: 用来指定受此loger约束的某一包或者具体的某一个类

        Level: 用来设置打印级别,大小写无关,:trace < debug <info < warn < error < all < off

        还有一特定值,INHERITED或同义词NULL,代表强制执行上级的级别,如果未设置些属性,那么当前logger将会继承上级的级别

        addtivity: 是否向上级loger传递打印信息。默认是true,<logger>一样,可以包含零个或多个

        <appender-ref>元素,标识这个appender将会添加到这个loger

      7.子节点<root>

        作用:节点,其实它也是一个loger,只不过是loger的顶级,只有一个level属性

           level: 用来设置打印级别,大小无关,trace < debug <info < warn < error < all < off

             不能设置为INHERITED或者同义词NULL,默认是DEBUG

     六.logback所需jar包

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.7</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-core</artifactId>
      <version>1.1.7</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-access</artifactId>
      <version>1.1.7</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.1.7</version>
    </dependency>

     七.自定义输出格式

    %m         输出代码中指定的消息
            
    %p         输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
            
    %r         输出自应用启动到输出该log信息耗费的毫秒数
            
    %c         输出所属的类目,通常就是所在类的全名
            
    %t         输出产生该日志事件的线程名
            
    %n         输出一个回车换行符,Windows平台为“
    ”,Unix平台为“
    ”
            
    %d         输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
            
    %L         输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

    八.示例

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="true" scanPeriod="60 seconds" debug="false">
        
          <!-- 输出到控制台上 -->
       <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
          <encoder> 
                  <pattern>%d{yyyy-MM-dd HH:mm:ss}| %-5level|%c %L|%m%n</pattern> 
            </encoder> 
       </appender> 
         <logger name="com.zpb.metrics" level="debug" additivity="false">
                  <appender-ref ref="STDOUT"/>
          </logger>
          <!-- 输出到文件上 -->    
          <appender name="metrics" class="ch.qos.logback.core.FileAppender">
              <File>D:logsmetrics.log</File>
              <encoder>
                 <pattern>%d{yyyy-MM-dd HH:mm:ss}| %-5level|%c|%m %n</pattern>
             </encoder>
          </appender>
          <!-- logger 中的配置的解释:
              name: 从指定的包路径下接收日志
              level: 设置日志接收的级别
              additivity:表示此logger信息不再向上级传递
           -->
          <logger name="com.metrics.zpb" level="info" additivity="false">
                  <appender-ref ref="metrics"/>
          </logger>
          
        <root level="INFO">
                <appender-ref ref="STDOUT" />
                <appender-ref ref="metrics"/>
        </root>
    </configuration>

    此配置表示:将不同级别的日志分别输出到控制台和日志文件中
  • 相关阅读:
    输出流OutputStream简单理解
    IO流实现写入规定的acci码值
    事务的ACID属性&&五种状态
    java基础总结之Hashtable
    HBase
    oracle交换分区
    ArrayList 和 LinkedList 的区别(底层数据结构): 什么时候使用arrayList,什么时候使用LinkedList (一个小时)
    Mac中MariaDB数据库的安装步骤
    Mac OS X中MacPorts安装和使用(linux 的 yum)
    SFTP秘钥认证
  • 原文地址:https://www.cnblogs.com/MrRightZhao/p/11010138.html
Copyright © 2020-2023  润新知