使用logback记录日志

1.Logback介绍

Logback 分为三个模块:CoreClassic 和 Access。Core模块是其他两个模块的基础。 Classic模块扩展了core模块。 Classic模块相当于log4j的显著改进版。Logback-classic 直接实现了 SLF4J API。

要引入logback,由于Logback-classic依赖slf4j-api.jar和logback-core.jar,所以要把slf4j-api.jar、logback-core.jar、logback-classic.jar,添加到要引入Logbac日志管理的项目的class path中.

以下是maven pom配置

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.7</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.2</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.1.2</version>
</dependency>

2.Logback的配置

Logger、Appender和 Layout

Logback建立于三个主要类之上:Logger、Appender 和 Layout。Logger类是logback-classic模块的一部分,而Appender和Layout接口来自logback-core。作为一个多用途模块,logback-core 不包含任何 logger。

Logger作为日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型、级别。Appender主要用于指定日志输出的目的地,目的地可以是控制台、文件、远程套接字服务器、 MySQL、 PostreSQL、 Oracle和其他数据库、 JMS和远程UNIX Syslog守护进程等。Layout 负责把事件转换成字符串,格式化的日志信息的输出。

2.1 Logger context

各个logger 都被关联到一个 LoggerContext,LoggerContext负责制造logger,也负责以树结构排列各 logger。

如果 logger的名称带上一个点号后是另外一个 logger的名称的前缀,那么,前者就被称为后者的祖先。如果 logger与其后代 logger之间没有其他祖先,那么,前者就被称为子logger 之父。比如,名为 “com.foo”“的 logger 是名为”com.foo.Bar”之父。root logger 位于 logger 等级的最顶端。

2.2 有效级别与级别继承

Logger 可以被分配级别。级别包括:TRACE、DEBUG、INFO、WARN 和 ERROR,定义于 ch.qos.logback.classic.Level类。如果 logger没有被分配级别,那么它将从有被分配级别的最近的祖先那里继承级别。root logger 默认级别是 DEBUG。

打印方法与基本选择规则

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

记录请求级别为 p,其 logger的有效级别为 q,只有则当 p>=q时,该请求才会被执行。

该规则是 logback 的核心。级别排序为: TRACE < DEBUG < INFO < WARN < ERROR

例如,转换模式”%-4relative [%thread] %-5level %logger{32} - %msg%n”在 PatternLayout里会输出形如:

176 [main] DEBUG manual.architecture.HelloWorld2 - Hello world.
  • 第一个字段是自程序启动以来的逝去时间,单位是毫秒。
  • 第二个地段发出记录请求的线程。
  • 第三个字段是记录请求的级别。
  • 第四个字段是与记录请求关联的 logger 的名称。
  • “-“之后是请求的消息文字。
2.3 Logback的默认配置

如果配置文件 logback-test.xml 和 logback.xml 都不存在,那么 logback 默认地会调用BasicConfigurator ,创建一个最小化配置。最小化配置由一个关联到根 logger 的ConsoleAppender 组成。输出用模式为%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 的 PatternLayoutEncoder 进行格式化。root logger 默认级别是 DEBUG。

2.4 logback配置文件

Logback 配置文件的语法非常灵活。可以这样描述配置文件的基本结构:以<configuration>开头,后面有零个或多个<appender>元素,有零个或多个<logger>元素,有最多一个<root>元素。

2.4 Logback默认配置的采用的步骤
  1. 尝试在 classpath 下查找文件 logback-test.xml;

  2. 如果文件不存在,则查找文件 logback.xml;

  3. 如果两个文件都不存在,logback 用 BasicConfigurator 自动对自己进行配置,这会导致记录输出到控制台。

2.5 Logback自定义配置
2.5.1 配置root logger

元素配置根 logger。该元素有一个 level属性。没有 name 属性,因为已经被命名为”ROOT”。 Level 属性的值大小写无关,其值为下面其中一个字符串:TRACE、DEBUG、INFO、WARN、ERROR、ALL和 OFF。注意不能设置为”INHERITED” 或”NULL”。 元素可以包含零个或多个元素。与元素类似,声明元素后,会先关闭然后移除全部当前 appender,只引用声明了的 appender。
如果 root 元素没有引用任何 appender,就会失去所有 appender。

2.5.2 配置 Appenders

Appender 用元素配置,该元素必要属性 name 和 class。 name 属性指定 appender 的名称,class 属性指定 appender 类的全限定名。 元素可以包含零个或多个元素、零个或多个元素和零个或多个元素。除了这三个常用元素之外,还可以包含 appender 类的任意数量的 javabean

2.5.3 运用滚动策略与触发策略

RollingFileAppender 继承 FileAppender,能够滚动记录文件。例如,RollingFileAppender能先记录到文件”log.txt”,然后当符合某个条件时,变成记录到其他文件。 RollingFileAppender 有两个与之互动的重要子组件。第一个是RollingPolicy,负责滚动。第二个是 TriggeringPolicy,决定是否以及何时进行滚动。所以,RollingPolicy 负责”什么”, TriggeringPolicy 负责”何时”。

要想 RollingFileAppender 起作用,必须同时设置 RollingPolicy 和 TriggeringPolicy。不过,如果 RollingPolicy 也实现了 TriggeringPolicy 接口,那么只需要设置 RollingPolicy。

下面附上我的配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <jmxConfigurator/>

    <!--定义一个名为 console 的appender,并将其关联到ch.qos.logback.core.ConsoleAppender-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 典型的日志pattern -->
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
            <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
            <!-- 此处设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 综合时间与大小的滚动策略,先按天滚动,文件大于100mb时再按大小滚动 -->
    <appender name="businessLogFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${catalina.base}/logs/business.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${catalina.base}/logs/business-%d{yyyy-MM-dd}_%i.log.zip</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 保存前30天的日志文件 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
            <!-- 此处设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 错误日志 -->
    <appender name="errorlogFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${catalina.base}/logs/error.log</file>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${catalina.base}/logs/error-%d{yyyy-MM-dd}_%i.log.zip</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 保存前30天的日志文件 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
            <!-- 此处设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 需要打印SQL时,修改下面的INFO为DEBUG -->
    <logger name="com.os" level="INFO"/> <!-- 正式环境使用 INFO,测试时改为 DEBUG -->

    <!-- business log 使用独立的appender,不继承Root的appender -->
    <logger name="business" level="INFO" additivity="false">
        <appender-ref ref="businessLogFile"/>
    </logger>
    <logger name="myerror" level="ERROR" additivity="false">
        <appender-ref ref="errorlogFile"/>
    </logger>
    <logger name="org.springframework" level="INFO"/>
    <logger name="org.mybatis" level="INFO"/>
    <logger name="org.apache.ibatis" level="INFO"/>

    <root level="INFO">
        <appender-ref ref="console"/>
        <appender-ref ref="businessLogFile"/>
        <appender-ref ref="errorlogFile"/>
    </root>
</configuration>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值