• logback日志解析


    Logback是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J。

    Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml

    logback-spring.xml 例子

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration  scan="true" scanPeriod="60 seconds" debug="false">
        <contextName>logback</contextName>
        <property name="log.path" value="E:\test\logback.log" />
        <!--输出到控制台-->
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
           <!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>ERROR</level>
            </filter>-->
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <!--输出到文件-->
        <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${log.path}</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>logback.%d{yyyy-MM-dd}.log</fileNamePattern>
            </rollingPolicy>
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <root level="info">
            <appender-ref ref="console" />
            <appender-ref ref="file" />
        </root>
    
        <!-- logback为java中的包 -->
        <logger name="com.dudu.controller"/>
        <!--logback.LogbackDemo:类的全路径 -->
        <logger name="com.dudu.controller.LearnController" level="WARN" additivity="false">
            <appender-ref ref="console"/>
        </logger>
    </configuration>

    根节点<configuration>包含的属性

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

    根节点<configuration>的子节点:
      <configuration>下面一共有2个属性,3个子节点,分别是:

    属性一:设置上下文名称<contextName>

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

    属性二:设置变量<property>

    用来定义变量值的标签,<property> 有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值。通过<property>定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。

    子节点一<appender>

    appender用来格式化日志输出节点,有俩个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。

    1、控制台输出ConsoleAppender:
     <!--输出到控制台-->
     <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
             <level>ERROR</level>
         </filter>
         <encoder>
             <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
         </encoder>
     </appender>

    <encoder>表示对日志进行编码:

      • %d{HH: mm:ss.SSS}——日志输出时间
      • %thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用
      • %-5level——日志级别,并且使用5个字符靠左对齐
      • %logger{36}——日志输出者的名字
      • %msg——日志消息
      • %n——平台的换行符

    ThresholdFilter为系统定义的拦截器,例如我们用ThresholdFilter来过滤掉ERROR级别以下的日志不输出到文件中。如果不用记得注释掉,不然你控制台会发现没日志

    2、输出到文件RollingFileAppender

    另一种常见的日志输出到文件,随着应用的运行时间越来越长,日志也会增长的越来越多,将他们输出到同一个文件并非一个好办法。

    RollingFileAppender用于切分文件日志:

    <!--输出到文件-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logback.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    其中重要的是rollingPolicy的定义,上例中<fileNamePattern>logback.%d{yyyy-MM-dd}.log</fileNamePattern>定义了日志的切分方式——把每一天的日志归档到一个文件中,同理,可以使用%d{yyyy-MM-dd_HH-mm}来定义精确到分的日志切分方式
    <maxHistory>30</maxHistory>表示只保留最近30天的日志,以防止日志填满整个磁盘空间
    <totalSizeCap>1GB</totalSizeCap>用来指定日志文件的上限大小,例如设置为1GB的话,那么到了这个值,就会删除旧的日志

    <maxHistory>可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每个月滚动,且<maxHistory>是6,则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除

    子节点二<root>

    root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性。(也可看做<loger>元素,但是它是根loger,其他loger未配置的属性要继承root节点的配置)

    • level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。
      默认是DEBUG。
      <root>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个loger。

    子节点三<loger>

    <loger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender><loger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。

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

     loger,root 节点配置详解可参考:https://blog.csdn.net/ahwsk/article/details/105119501

    日志优先级别标准顺序为:

    ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
    OFF | 关闭:最高级别,不打印日志。
    FATAL | 致命:指明非常严重的可能会导致应用终止执行错误事件。
    ERROR | 错误:指明错误事件,但应用可能还能继续运行。
    WARN | 警告:指明可能潜在的危险状况。
    INFO | 信息:指明描述信息,从粗粒度上描述了应用运行过程。
    DEBUG | 调试:指明细致的事件信息,对调试应用最有用。
    TRACE | 跟踪:指明程序运行轨迹,比DEBUG级别的粒度更细。
    ALL | 所有:所有日志级别,包括定制级别

    如果日志设置为L,一个级别为P的输出日志,只有当P >= L时日志才会输出。

    即如果日志级别L设置INFO,只有P的输出级别为INFO、WARN,ERROR ,FATAL 的日志才会正常输出。

  • 相关阅读:
    Zepto跨域请求
    C语言中浮点数的比较
    IOS开源项目Telegram初试
    Java NIO初试
    ios8.0之后注册通知中心
    spring AOP的配置
    IOS学习日记-2014年10月25日
    struct框架中实体类中属性的类型错误问题
    Oracle存储过程使用DML语句问题
    跳出类似framset 嵌入式框架
  • 原文地址:https://www.cnblogs.com/wyhb008/p/15428337.html
Copyright © 2020-2023  润新知