• logback


    logback的架构


    logback-core:基础模块, 为其它的两个模块提供支持
    logback-classic:是log4j的改进版本, 并且此模块实现了slf4j api, 所以可以很容易切换至其它日志框架。

    如何使用

    logback-classic模块所需的依赖:slf4j-api.jar, logback-core.jar, logback-classic.jar

    日志级别

    TRACE < DEBUG < INFO < WARN < ERROR

    方法打印以及基本选择原则

    根据定义,打印的方法决定的日志的级别。例如:L 是一个 logger 实例,L.info("...") 的日志级别就是 INFO。

    如果一条的日志的打印级别大于 logger 的有效级别,该条日志才可以被打印出来。这条规则总结如下:

    • 日志的打印级别为 p,Logger 实例的级别为 q,如果 p >= q,则该条日志可以打印出来。
    • 日志的实例级别:对于一个给定名为L的logger,它的有效层级为从自身一直回溯到root logger, 直到找到第一个不为空的层级作为自己的层级。root logger的默认级别为 debug

    logback 的配置


    配置文件中使用变量

    直接定义

    <configuration>
        <property name="USER_NAME" value="/data/logs" />
    
        <appender name="FILE" class="ch.qos.logback.core.FileAppender">
            <file>${USER_NAME}/myApp.log</file>
            <encoder>
                <pattern>%msg%n</pattern>
            </encoder>
        </appender>
    
        <root level="debug">
            <appender-ref ref="FILE" />
        </root>    
    </configuration>
    

    将多个变量配置在一个文件中

    <configuration>
        <property file="F:projectlogback-examplessrcmain
    esourcesvariables1.properties"/>
    
        <appender name="FILE" class="ch.qos.logback.core.FileAppender">
            <file>${USER_HOME}/myApp.log</file>
            <encoder>
                <pattern>%msg%n</pattern>
            </encoder>
        </appender>
    
        <root level="debug">
            <appender-ref ref="FILE" />
        </root>
    </configuration>
    

    variables1.properties:

    USER_HOME=/data/logs
    

    使用classpath中的文件

    <configuration>
        <property resource="resource1.properties" />
    
        <appender name="FILE" class="ch.qos.logback.core.FileAppender">
            <file>${USER_HOME}/myApp.log</file>
            <encoder>
                <pattern>%msg%n</pattern>
            </encoder>
        </appender>
    
        <root level="debug">
            <appender-ref ref="FILE" />
        </root>
    </configuration>
    

    变量的默认名

    在某些情况下,如果某个变量没有被声明,或者为空,默认值则非常有用。在 bash shell 中,默认值可以通过 ":-" 来指定。例如:假设变量 aName 没有被定义,"${aNme:-golden}" 会被解释成 "golden" 。

    filter过滤器

    • 使用情况1:我只想把info级别的日志写入到名为logFile-info.log文件中:

      <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
              <file>logFile-info.log</file>
              <filter class="ch.qos.logback.classic.filter.LevelFilter">
                  <level>INFO</level>
                  <onMatch>ACCEPT</onMatch>
                  <onMismatch>DENY</onMismatch>
              </filter>
              <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                  <!--             按天轮转 -->
                  <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
                  <!--             保存 30 天的历史记录,最大大小为 30GB -->
                  <maxHistory>30</maxHistory>
                  <totalSizeCap>3GB</totalSizeCap>
              </rollingPolicy>
              <encoder>
                  <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n</Pattern>
              </encoder>
      </appender>
      

      在此情况下,文件中只有info级别的日志,即使warn、error级别高于info也不会打印

    • 使用情况2:我想把info级别以上的日志都写入到文件中:

      <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
              <file>logFile-info.log</file>
              <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                  <level>INFO</level>
                  <onMatch>ACCEPT</onMatch>
                  <onMismatch>DENY</onMismatch>
              </filter>
              <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                  <!--             按天轮转 -->
                  <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
                  <!--             保存 30 天的历史记录,最大大小为 30GB -->
                  <maxHistory>30</maxHistory>
                  <totalSizeCap>3GB</totalSizeCap>
              </rollingPolicy>
              <encoder>
                  <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n</Pattern>
              </encoder>
      </appender>
      

      在此情况下,高于info级别的日志信息会保存在文件中。它们之间的区别在于标签中的class

  • 相关阅读:
    MFC listcontrol 分列 添加行数据 点击列头排序
    MFC 设置控件事件对应的函数
    MFC CString to char* (Visual Studio 2015 亲测可用)
    MFC MessageBox AfxMessageBox
    iOS 注意事项
    iOS instancetype or id ?
    iOS Aspect Fit,Aspect Fill,Scale To Fill
    iOS UIImageView用代码添加点击事件
    iOS 安装Cocoapods以及安装第三方库的操作流程
    iOS 获取当前用户的用户路径并写入文件
  • 原文地址:https://www.cnblogs.com/kongieg/p/14179606.html
Copyright © 2020-2023  润新知