记录日志之logback

logback简介

logback是log4j作者的开发的又一个记录日志的开源技术,相比于log4j而言,logback在很多方面都有很大的提升。logback分为三个模块:logback-core, logback-classic和logback-access。其中 logback-core是另外两个的基础模块,logback-classic是log4j的升级版本,同时也实现了SLF4j的API,因此可以方便的使用SLF4j,还有一点要说的就是SLF4j和logback的作者是同一个人,所以说logback是原生的实现了SLF4j。logback-access集成了一些servlet容器,比如tomcat

1.下载jar包
logback官网下载:https://logback.qos.ch/download.html
百度网盘下载:http://pan.baidu.com/s/1o7RROpG
下载完毕解压后,需要将下面三个jar包导入到项目中:

  • logback-access-1.2.3.jar
  • logback-classic-1.2.3.jar
  • logback-core-1.2.3.jar

如果要是用slf4j的话需要下载slf4j的jar包,因为slf4j和logback无缝集成,所以这里不用下载slf4j连接logback的jar包了。

2.添加日志输出控制文件
在src目录下创建一个logback.xml文件,里面写上下面内容:

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

<configuration scan="true" scanPeriod="3 seconds" DEBUG="true">

    <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
            </pattern>
        </encoder>
    </appender>


    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>file.log</file>
        <append>true</append>
        <encoder>
            <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <appender name="ROLLINGFILE"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>mylog.txt</file>
        <rollingPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <!-- 每个日志文件大小不超过100MB,在日志文件总大小不超过20GB的情况下保存60天, -->
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>60</maxHistory>
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>

3.编写日志记录代码
因为logback原生就实现了SLF4j的API,所以这里使用SLF4j。

package com.monkey1024.test;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.status.OnConsoleStatusListener;
import ch.qos.logback.core.status.StatusManager;

public class LogbackTest01 {

    public static void main(String[] args) {
        // 创建记录日志的对象
        Logger log = LoggerFactory.getLogger(Slf4jTest01.class);

        log.debug("debug信息");
        log.info("info信息");
        log.warn("warn信息");
        log.error("error信息");

    }

}

日志输出控制文件分析

configuration
scan=”true”表示logback会自动加载修改后的xml配置文件,默认情况下,每隔一分钟扫描一次,可以通过scanPeriod=”3 seconds”设置为每3秒扫描一次。
DEBUG=”true”该配置并不是设置日志级别为debug,而是会打印logback内部运行的一些信息,可以查看logback的运行状态,默认是false。

statusListener
可以通过设置监听器来监听logback内部运行的信息和状态。

appender
可以编写多个appender来实现不同的日志输出方式。

其中name属性用于指定appender的名称,即给appender命名
class属性用于指定日志的输出方式。

  • ch.qos.logback.core.ConsoleAppender:将日志信息输出到控制台
  • ch.qos.logback.core.FileAppender:日志输出到文件
  • ch.qos.logback.core.rolling.RollingFileAppender:当日志文件大小到达指定尺寸的时候将产生一个新的日志文件。

encoder
在logback0.9.19版本中引入了encoder来替代layout。该标签默认使用PatternLayoutEncoder,其中pattern标签可以设置日志的输出格式。

file
该标签在appender标签下,用于指定输出日志的文件名。

append
该标签在appender标签下,是否以追加的方式写出到日志文件中。

rollingPolicy
该标签在appender标签下,用来指定产生新文件的方式。
常用的有SizeAndTimeBasedRollingPolicy(根据日期和文件大小产生新的文件)和FixedWindowRollingPolicy(根据文件大小产生新的文件)

maxFileSize
该标签在rollingPolicy下,当文件大小超过该标签中指定的大小时会创建新的文件,例如:5kb,5MB,5GB,默认单位是字节b,如果只写500的话,则表示500b

maxHistory
该标签在rollingPolicy下,用来指定日志保存的天数。

totalSizeCap
该标签在rollingPolicy下,保存日志的总大小,通常写在maxHistory的后面。

level
该标签在root下,用来表示日志的打印级别

appender-ref
该标签在root下,用来添加appender。