logback配置详解

原文地址:http://chenxiaoqiong.com/articles/logback/

最近公司项目进行了重构,日志管理从Log4j迁移到了LogBack。 Logback是由log4j创始人Ceki Gülcü为取代log4j而设计的又一个开源日志组件。无论从设计上还是实现上,Logback相对log4j而言有了相对多的改进:http://www.oschina.net/translate/reasons-to-prefer-logbak-over-log4j

logback配置详解

日志级别

  1. DEBUG:指出细粒度信息事件对调试应用程序是非常有帮助的;
  2. INFO:消息在粗粒度级别上突出强调应用程序的运行过程;
  3. WARN:会出现潜在错误的情形;
  4. ERROR:指出虽然发生错误事件,但仍然不影响系统的继续运行;
  5. FATAL:指出每个严重的错误事件将会导致应用程序的退出;
  6. 另外,还有两个可用的特别的日志记录级别:
    ALL:用于打开所有日志记录;
    OFF:用于关闭所有日志记录。
    优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。通过定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。如果设置级别为INFO,则优先级高于等于INFO级别(如:INFO、 WARN、ERROR)的日志信息将可以被输出,小于该级别的如DEBUG将不会被输出。

基本配置及解释

基本配置文件
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <property name="log.charset.encoding" value="UTF-8"/>
        <property name="LOG_HOME" value="log" />
        <!-- 控制台输出 -->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <Encoding>UTF-8</Encoding>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
                </pattern>
            </layout>
        </appender>

        <!-- 按照每天生成日志文件 -->
        <appender name="FILE"
                  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <Encoding>UTF-8</Encoding>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <FileNamePattern>${LOG_HOME}/myApp.log.%d{yyyy-MM-dd}.log</FileNamePattern>
                <MaxHistory>30</MaxHistory>
            </rollingPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
                </pattern>
            </layout>
        </appender>

        <!-- 按照每天生成错误日志文件 -->
        <appender name="FILE-ERROR"
                  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <Encoding>UTF-8</Encoding>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <FileNamePattern>${LOG_HOME}/myApp.log_error.%d{yyyy-MM-dd}.log</FileNamePattern>
                <MaxHistory>30</MaxHistory>
            </rollingPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
                </pattern>
            </layout>
            <!-- 下面为配置只输出error级别的日志 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>ERROR</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>

        <!-- 设置具体一个类日志的日志打印 -->
        <loger name="com.candy.controller.TestController" level="INFO" activity="false">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="FILE"/>
        </loger>

        <root level="DEBUG">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="FILE" />
        </root>
    </configuration>
配置文件节点详解
  • 设置变量: < property >
    用来定义变量值的标签, 有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。

  • 设置loger:< loger >
    用来设置某一个包或者具体的某一个类的日志打印级别、以及指定。仅有一个name属性,一个可选的level和一个可选的addtivity属性。
    name:
    用来指定受此loger约束的某一个包或者具体的某一个类。
    level:
    用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特殊值INHERITED或者同义词NULL,代表强制执行上级的级别。
    如果未设置此属性,那么当前loger将会继承上级的级别。
    addtivity:
    是否向上级loger传递打印信息。默认是true。
    < loger >可以包含零个或多个< appender-ref >元素,标识这个appender将会添加到这个loger。

  • 设置root:< root >
    也是元素,但是它是根loger。只有一个level属性,应为已经被命名为”root”.
    level:
    用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。
    默认是DEBUG。
    可以包含零个或多个元素,标识这个appender将会添加到这个loger。

过滤器filter

  • 过滤器的返回值只能是ACCEPT、DENY和NEUTRAL的其中一个
    DENY:记录事件立即被抛弃,不再经过剩余过滤器;
    NEUTRAL:有序列表里的下一个过滤器会接着处理记录事件;
    ACCEPT:那么记录事件被立即处理,不再经过剩余过滤器。
    过滤器被添加到中,为添加一个或多个过滤器后,可以用任意条件对日志进行过滤。 有多个过滤器时,按照配置顺序执行。

  • 常用的过滤器:

    1. LevelFilter: 级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。有以下子节点:
      < level >:设置过滤级别
      < onMatch >:用于配置符合过滤条件的操作
      < onMismatch >:用于配置不符合过滤条件的操作
    2. ThresholdFilter: 临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝。
    3. EvaluatorFilter: 求值过滤器,评估、鉴别日志是否符合指定条件。

此篇文章只是自己做了一下总结,还有诸多不足,还请大家指正!

### Logback 配置文件详解 Logback配置文件通常命名为 `logback.xml` 或 `logback-spring.xml`,并放置在项目的类路径下(如 `src/main/resources/`)。以下是关于 Logback 配置文件的详细说明以及一个完整的示例。 #### 1. 基本结构 Logback 配置文件的核心由 `<configuration>` 根标签组成,内部主要包含以下几个部分: - **`<appender>`**: 定义日志输出的目标及其格式。 - **`<logger>`**: 定义特定包或类的日志记录行为。 - **`<root>`**: 定义全局默认的日志记录行为。 --- #### 2. Appender 类型 常见的 Appender 类型包括: - **ConsoleAppender** 将日志输出到控制台。适用于开发阶段快速查看日志信息[^5]。 ```xml <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"> <target>System.out</target> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> ``` - **FileAppender** 将日志输出到固定文件中。适合保存长期运行的应用程序日志[^3]。 ```xml <appender name="fileAppender" class="ch.qos.logback.core.FileAppender"> <file>${LOG_PATH}/application_fix.log</file> <append>true</append> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> ``` - **RollingFileAppender** 支持按时间或大小分割日志文件,防止单个日志文件过大[^5]。 ```xml <appender name="rollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/application.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 按天滚动 --> <fileNamePattern>${LOG_PATH}/application-%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> <!-- 保留最近30天的日志 --> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> ``` --- #### 3. Logger 和 Root 配置 - **Root Logger** 设置全局默认的日志级别和使用的 Appender[^4]。 ```xml <root level="INFO"> <appender-ref ref="consoleAppender"/> <appender-ref ref="rollingFileAppender"/> </root> ``` - **Custom Logger** 对于某些特定包或类,可以单独定义更精细的日志级别和 Appender[^2]。 ```xml <logger name="com.example.myproject.service" level="DEBUG" additivity="false"> <appender-ref ref="fileAppender"/> </logger> ``` --- #### 4. 动态参数支持 Logback 支持通过占位符 `${}` 引用外部变量,例如从系统环境变量或 Spring Boot 的 `application.properties` 文件加载配置[^1]。 ```properties logging.path=/var/logs/myapp logging.file.name=myapp.log ``` 对应的 Logback 配置如下: ```xml <property name="LOG_PATH" value="${logging.path}" /> <property name="APP_NAME" value="${logging.file.name}" /> <appender name="rollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/${APP_NAME}</file> ... </appender> ``` --- #### 5. 示例完整配置文件 以下是一个综合性的 `logback-spring.xml` 配置文件示例: ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 定义动态属性 --> <property name="LOG_PATH" value="/var/logs/myapp" /> <property name="APP_NAME" value="myapp" /> <!-- Console Appender --> <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"> <target>System.out</target> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- File Appender --> <appender name="fileAppender" class="ch.qos.logback.core.FileAppender"> <file>${LOG_PATH}/${APP_NAME}_fix.log</file> <append>true</append> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- Rolling File Appender --> <appender name="rollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/${APP_NAME}.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- Root Logger --> <root level="INFO"> <appender-ref ref="consoleAppender"/> <appender-ref ref="rollingFileAppender"/> </root> <!-- Custom Logger --> <logger name="com.example.myproject.service" level="DEBUG" additivity="false"> <appender-ref ref="fileAppender"/> </logger> </configuration> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值