Logback日志文件学习总结

本文详细介绍了Logback.xml配置文件的结构与使用方法,包括相关概念、配置详解及各类appender的应用,如ConsoleAppender、FileAppender和RollingFileAppender,帮助读者深入理解日志管理。

Logback.xml配置学习总结

相关概念

  1. Logger:
    1. 日志的记录器
    2. 关联到应用的对应的context
    3. 用于存放日志对象
    4. 也可以定义日志类型、级别
  2. appender
    1. 指定日志输出的目的地
      1. 控制台
      2. 文件
      3. 远程套接字服务器
      4. MySQL、PostreSQL、 Oracle和其他数据库
      5. JMS和远程UNIX Syslog守护进程等
  3. layout
    负责把事件转换成字符串,格式化的日志信息的输出

配置文件详解

整体结构图

在这里插入图片描述

configuration

属性

属性名默认值作用
scantrue设置问true时候,将会被重新加载
scanPeriod60 seconds轮询监控配置文件是否被修改的时间间隔,只有scan为true的时候,才会生效
debugfalse当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
</configuration>

子节点

元素名作用
contextName用来设置上下文名称,每个logger都关联到logger上下文,默认上下文名称为default。但可以使用设置成其他名字,用于区分不同应用程序的记录。一旦设置不能修改
property用来定义变量值,它有两个属性name和value,通过定义的值会被插入到logger上下文中,可以使“${}”来使用变量。
timestamp获取时间戳字符串,他有两个属性key和datePattern,key: 标识此 的名字,datePattern: 设置将当前时间(解析配置文件的时间)转换为字符串的模式,遵循java.txt.SimpleDateFormat的格式。
appender负责写日志的组件,它有两个必要属性name和class。name指定appender名称,class指定appender的全限定名
logger用来设置某一个包或具体的某一个类的日志打印级别、以及指定。仅有一个name属性,一个可选的level和一个可选的addtivity属性。可以包含零个或多个元素,标识这个appender将会添加到这个logger,name: 用来指定受此logger约束的某一个包或者具体的某一个类。level: 用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。 如果未设置此属性,那么当前loger将会继承上级的级别。addtivity: 是否向上级loger传递打印信息。默认是true。同一样,可以包含零个或多个元素,标识这个appender将会添加到这个loger。
root同logger
  1. contextName For Example:

    <? xml version="1.0" encoding="UTF-8" ?>
    <configuration scan="true" scanPeriod="60 seconds" debug="false">
    	<contextName>appid</contextName>
    </configuration>
    
  2. property For Example:

    <configuration scan="true" scanPeriod="60 seconds" debug="false"> 
       <property name="APP_Name" value="myAppName" /> 
       <contextName>${APP_Name}</contextName> 
       <!--其他配置省略--> 
    </configuration>
    
  3. timestamp For Example:

    configuration scan="true" scanPeriod="60 seconds" debug="false"> 
      <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/> 
      <contextName>${bySecond}</contextName> 
      <!-- 其他配置省略--> 
    </configuration>
    
  4. appender 独立拿出来说

  5. logger

    1. 属性

      • name: 用来指定受此loger约束的某一个包或者具体的某一个类
      • level: 用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。 如果未设置此属性,那么当前loger将会继承上级的级别。
    2. For Example

      <!-- show parameters for hibernate sql 专为 Hibernate 定制 -->
      <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />
      <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />
      <logger name="org.hibernate.SQL" level="DEBUG" />
      <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
      <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />
      
      <!--myibatis log configure-->
      <logger name="com.apache.ibatis" level="TRACE"/>
      <logger name="java.sql.Connection" level="DEBUG"/>
      <logger name="java.sql.Statement" level="DEBUG"/>
      <logger name="java.sql.PreparedStatement" level="DEBUG"/>
      
  6. root 同logger

    1. For Example

          <root level="debug">
              <appender-ref ref="DEBUG" />
          </root>
      

注意: 我这里是这么理解logger,root标签,配置对应 level环境 比如说 debug 需要输出到console和日志文件里面,线上的时候,只需要输出到日志文件里面

appender

属性

  1. name指定appender名称
  2. class指定appender的全限定名

appender种类

类名作用
ConsoleAppender把日志输出到控制台
FileAppender把日志添加到文件
RollingFileAppender滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件
SocketAppender待求证
SMTPAppender待求证
DBAppender待求证
SyslogAppender待求证
SiftingAppender待求证
自定义待求证

注意: http://logback.qos.ch/documentation.html

ConsoleAppender

  1. 子元素

    元素名默认值作用
    encoder对日志进行格式化。(具体参数稍后讲解 )
    targetSystem.out字符串System.out(默认)或者System.err(区别不多说了)
  2. for Example

    <configuration> 
       <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
          <encoder> 
             <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern> 
          </encoder> 
       </appender> 
    </configuration>
    

FileAppender

  1. 子元素

    元素名默认值作用
    file没有默认值被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建
    appendtrue为true日志被追加到文件结尾,如果是 false,清空现存文件
    encoder对记录事件进行格式化(单独拿出来说)
    prudentfalse为true日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低
  2. For Example

    <? xml version="1.0" encoding="UTF-8" ?>
    <configuration>
    	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    		<file>demo.log</file>
    		<append>true</append>
    		<encoder>%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)</encoder>
    		<prudent>false</prudent>
    	</appender>
    </configuration>
    

RollingFileAppender

  1. 子元素

    元素名默认值作用
    file没有默认值被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建
    appendtruetrue,日志被追加到文件结尾,如果是 false,清空现存文件
    rollingPolicy当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类
  2. For Example

    <configuration> 
       <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
          <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
             <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern> 
             <maxHistory>30</maxHistory> 
          </rollingPolicy> 
          <encoder> 
             <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
          </encoder> 
       </appender> 
    
       <root level="DEBUG"> 
          <appender-ref ref="FILE" /> 
       </root> 
    </configuration>
    

rollingPolicy

  1. TimeBasedRollingPolicy:最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。

    元素作用
    fileNamePattern必要节点,包含文件名及“%d”转换符,“%d”可以包含一个java.text.SimpleDateFormat指定的时间格式,如:%d{yyyy-MM}。如果直接使用 %d,默认格式是 yyyy-MM-dd。RollingFileAppender的file字节点可有可无,通过设置file,可以为活动文件和归档文件指定不同位置,当前日志总是记录到file指定的文件(活动文件),活动文件的名字不会改变;如果没设置file,活动文件的名字会根据fileNamePattern 的值,每隔一段时间改变一次。“/”或者“\”会被当做目录分隔符。
    maxHistory可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每个月滚动,且maxHistory是6,则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除。
 <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
	<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
    <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern> 
    		<maxHistory>30</maxHistory> 
    </rollingPolicy> 
    <encoder> 
       <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
    </encoder> 
 </appender> 

备注:上述配置表示每天生成一个日志文件,保存30天的日志文件。 一天一份 报错30份,所以就是30天

  1. SizeBasedTriggeringPolicy: 查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动

    元素作用
    maxFileSize这是活动文件的大小,默认值是10MB。
    prudent当为true时,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有两个限制,1不支持也不允许文件压缩,2不能设置file属性,必须留空。
  2. FixedWindowRollingPolicy: 根据固定窗口算法重命名文件的滚动策略
    疑问: 窗口大小的依据是什么,是类似 tcp里面的窗口?

    元素作用
    minIndex窗口索引最小值
    maxIndex窗口索引最大值,当用户指定的窗口过大时,会自动将窗口设置为12。
    fileNamePattern必须包含“%i”例如,假设最小值和最大值分别为1和2,命名模式为 mylog%i.log,会产生归档文件mylog1.log和mylog2.log。还可以指定文件压缩选项,例如,mylog%i.log.gz 或者 没有
  3. triggeringPolicy :告知 RollingFileAppender 合适激活滚动。

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
      <file>test.log</file> 

   <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> 
       <fileNamePattern>tests.%i.log.zip</fileNamePattern> 
       <minIndex>1</minIndex> 
       <maxIndex>3</maxIndex> 
   </rollingPolicy> 

   <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
        <maxFileSize>5MB</maxFileSize> 
   </triggeringPolicy> 
   <encoder> 
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
   </encoder> 
</appender> 

自己手写的一个配置文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值