Logback教程

Logback介绍

Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch。它当前分为下面三个模块:

  • logback-core:其它两个模块的基础模块
  • logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging
  • logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能

快速上手

配置步骤

1. 添加依赖包

<dependency>
	<groupId>ch.qos.logback</groupId>
	<artifactId>logback-classic</artifactId>
	<version>1.2.3</version>
</dependency>

注:在maven工程中只需要添加上面的一个依赖即可,上述依赖所需要依赖的其他依赖则会自动下载添加到工程里

2. 导入一个配置模板

你可以直接点击下面的链接下载一个logback基础配置模板

3. 添加自定义的配置项

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
      <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
    </layout>
  </appender>
  
  <logger name="com.base22" level="TRACE"/>

  <root level="debug">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

4. 在代码中使用logback输出日志

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

public class LogbackTest {

    private final static Logger logger = LoggerFactory.getLogger(LogbackTest.class);

    public void testLog() {
        logger.trace("Hello World!");
        logger.debug("How are you today?");
        logger.info("I am fine.");
        logger.warn("I love programming.");
        logger.error("I am programming.");
    }
}

示例

在maven工程中的pom.xml中添加依赖

<dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.6</version>
      <scope>provided</scope>
    </dependency>
工程源代码示例

在这里插入图片描述

logback.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 相对项目根目录的子文件夹logs -->
    <property name="HOME_LOG" value="logs"/>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}-[%M] - %msg%n</Pattern>
        </layout>
    </appender>

    <appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>TRACE</level>
        </filter>

        <!-- 测试部署时使用如下配置 -->
        <!-- 可让每天产生一个日志文件,最多 30 个,更早的删除 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <fileNamePattern>${HOME_LOG}/log-%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--日志文件保留天数-->
            <maxHistory>10</maxHistory>
        </rollingPolicy>

        <!--
             RollingFileAppender 一般情况下需要配置两个参数:
             RollingPolicy,负责滚动。TriggeringPolicy,决定是否以及何时进行滚动
             TimeBasedRollingPolicy比较特殊,它同时继承了RollingPolicy和TriggerPolicy。
        -->
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}-[%M] - %msg%n</pattern>
        </encoder>

        <!-- 正式部署时使用此配置 -->
        <!--
            <file>${app.home}/logs/log.log</file>
            <append>true</append>
            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                <fileNamePattern>${app.home}/logs/log.%i.log.zip</fileNamePattern>
                <minIndex>1</minIndex>
                <maxIndex>7</maxIndex>
            </rollingPolicy>

            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
            </encoder>

			 日志文件最大的大小
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <maxFileSize>50MB</maxFileSize>
            </triggeringPolicy>
         -->
    </appender>

    <logger name="com.lanou3g.spring" level="DEBUG"/>
    <logger name="org.springframework" level="ERROR"/>

    <!-- 日志输出级别 -->
    <root level="debug">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="RollingFile" />
    </root>
</configuration>
程序运行入口
@Slf4j
public class App {
    public static void main(String[] args) {
        getLog();
    }

    public static void getLog(){
        //优先级从高到低依次为:ERROR、WARN、INFO、DEBUG、TRACE。
        log.trace("main:trace");    //很低的日志级别,一般不会使用。
        log.debug("main:debug");    //指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。
        log.info("main:info");      //消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志。
        log.warn("main:warn");      //表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。
        log.error("main:error");    //指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。
    }
}
控制台输出
2019-06-22 10:42:17.208 [main] DEBUG com.logback.demo.App-[getLog] - main:debug
2019-06-22 10:42:17.216 [main] INFO  com.logback.demo.App-[getLog] - main:info
2019-06-22 10:42:17.218 [main] WARN  com.logback.demo.App-[getLog] - main:warn
2019-06-22 10:42:17.218 [main] ERROR com.logback.demo.App-[getLog] - main:error
单元测试代码示例
logback_test.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 相对项目根目录的子文件夹logs -->
    <property name="HOME_LOG" value="logs"/>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}-[%M] - %msg%n</Pattern>
        </layout>
    </appender>

    <appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>TRACE</level>
        </filter>

        <!-- 测试部署时使用如下配置 -->
        <!-- 可让每天产生一个日志文件,最多 30 个,更早的删除 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <fileNamePattern>${HOME_LOG}/log-%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--日志文件保留天数-->
            <maxHistory>10</maxHistory>
        </rollingPolicy>

        <!--
             RollingFileAppender 一般情况下需要配置两个参数:
             RollingPolicy,负责滚动。TriggeringPolicy,决定是否以及何时进行滚动
             TimeBasedRollingPolicy比较特殊,它同时继承了RollingPolicy和TriggerPolicy。
        -->
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}-[%M] - %msg%n</pattern>
        </encoder>

        <!-- 正式部署时使用此配置 -->
        <!--
            <file>${app.home}/logs/log.log</file>
            <append>true</append>
            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                <fileNamePattern>${app.home}/logs/log.%i.log.zip</fileNamePattern>
                <minIndex>1</minIndex>
                <maxIndex>7</maxIndex>
            </rollingPolicy>

            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
            </encoder>

			日志文件最大的大小
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <maxFileSize>50MB</maxFileSize>
            </triggeringPolicy>
         -->
    </appender>

    <logger name="com.lanou3g.spring" level="DEBUG"/>
    <logger name="org.springframework" level="ERROR"/>

    <!-- 日志输出级别 -->
    <root level="debug">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="RollingFile" />
    </root>
</configuration>
程序运行入口
@Slf4j
public class AppTest {
    /**
     * Rigorous Test :-)
     */
    @Test
    public void shouldAnswerWithTrue() {
        //优先级从高到低依次为:ERROR、WARN、INFO、DEBUG、TRACE。
        log.trace("trace");    //很低的日志级别,一般不会使用。
        log.debug("debug");    //指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。
        log.info("info");      //消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志。
        log.warn("warn");      //表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。
        log.error("error");    //指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。
    }
}
控制台输出
2019-06-22 10:52:32.208 [main] DEBUG com.logback.demo.AppTest-[shouldAnswerWithTrue] - debug
2019-06-22 10:52:32.217 [main] INFO  com.logback.demo.AppTest-[shouldAnswerWithTrue] - info
2019-06-22 10:52:32.219 [main] WARN  com.logback.demo.AppTest-[shouldAnswerWithTrue] - warn
2019-06-22 10:52:32.220 [main] ERROR com.logback.demo.AppTest-[shouldAnswerWithTrue] - error
生成的日志文件内容

注意:本示例的源代码和测试代码生成的日志在一个文件里

在这里插入图片描述

//	工程源代码示例记录的日志
2019-06-22 10:42:17.208 [main] DEBUG com.logback.demo.App-[getLog] - main:debug
2019-06-22 10:42:17.216 [main] INFO  com.logback.demo.App-[getLog] - main:info
2019-06-22 10:42:17.218 [main] WARN  com.logback.demo.App-[getLog] - main:warn
2019-06-22 10:42:17.218 [main] ERROR com.logback.demo.App-[getLog] - main:error

//	单元测试代码示例记录的日志
2019-06-22 10:52:32.208 [main] DEBUG com.logback.demo.AppTest-[shouldAnswerWithTrue] - debug
2019-06-22 10:52:32.217 [main] INFO  com.logback.demo.AppTest-[shouldAnswerWithTrue] - info
2019-06-22 10:52:32.219 [main] WARN  com.logback.demo.AppTest-[shouldAnswerWithTrue] - warn
2019-06-22 10:52:32.220 [main] ERROR com.logback.demo.AppTest-[shouldAnswerWithTrue] - error
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值