Java基础-日志-Logback日志框架


1. 什么是Logback?

记录日志的工具,包含三个模块:

  • logback-core:是其他两个模块的基础模块,提供了Logback的核心功能
  • logback-classic:它是一个完整的SLF4J API实现,使得可以方便地更换成其他日志系统,如log4j或JDK14 Logging
  • logback-access:该模块与Servlet容器集成,提供通过Http来访问日志的功能

2. LogBack基本使用

2.1 导入jar包

在这里插入图片描述

2.2 编写XML配置文件

注意:一定要放在src目录下

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="D:\\repo\\javasepro\\special-file\\logs" />

    <!-- 控制台输出:appender:控制日志的输出位置    CONSOLE:表示日志要输出到控制台 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 日志打印到控制台 -->
        <target>System.out</target>
        <!--
         格式化输出:
         %d:表示日期
         %thread:线程名
         %-5level:级别从左显示5个字符宽度
         %msg:日志消息
         %n:换行
         -->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %c [%thread] : %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 文件输出 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 格式化输出 -->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{100} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 文件日志输出位置 -->
        <file>${LOG_HOME}\ming-data.log</file>
        <!-- 指定日志文件拆分和压缩规则 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 通过指定压缩文件名称,来确定分割文件方式 %i 指的是索引-->
            <fileNamePattern>${LOG_HOME}\ming-data-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <!-- 日志文件保留天数 -->
            <MaxHistory>5</MaxHistory>
            <!-- 日志文件最大尺寸 -->
            <maxFileSize>10MB</maxFileSize>
        </rollingPolicy>
    </appender>

    <!-- 控制日志的输出情况:如开启日志、取消日志 -->
    <root level="ALL">
        <!-- 输出控制台 -->
        <appender-ref ref="CONSOLE" />
        <!-- 输出到文件 -->
        <appender-ref ref="FILE" />
    </root>
</configuration>

2.3 测试

public class logbackTest1 {

    // 创建一个Logger日志对象
    public static final Logger LOGGER = LoggerFactory.getLogger("logbackTest1");

    public static void main(String[] args) {
        try {
            // 输出基本信息
            LOGGER.info("------ 除法开始执行 ------");
            chu(10, 0);
            LOGGER.info("------ 除法执行成功 ------");
        } catch (Exception e) {
            // 输出错误信息
            LOGGER.error("------ 除法执行失败 ------");
            LOGGER.error(e.toString());
        }
    }

    private static void chu(int a, int b) {
        // 输出参数信息
        LOGGER.debug("参数a:" + a);
        LOGGER.debug("参数b:" + b);
        int c = a / b;
        LOGGER.info("计算结果:" + c);
    }
}

3. 日志级别

日志级别指的是日志信息的类型,日志都会分级别,依次从低到高如下。

日志级别说明
trace追踪,指明程序的运行轨迹
debug调试,实际应用中一般将其作为最低级别,而trace则很少使用
info输出重要的运行信息,数据连接、网络连接、IO操作等等,使用的较多
warn警告信息,可能会发生问题,使用较多
error错误信息,使用较多

为什么要学习日志级别?

用于对控制台以及文件输出进行控制。

<root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>

只有日志的级别是大于等于核心配置文件配置的日志级别,才会被记录,否则不记录。

4. 更加详细的logback.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="D:\\repo\\javasepro\\special-file\\logs\\wcs_printer" />

    <!-- 控制台输出 -->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 1格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!--临界值日志过滤级别配置 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!-- 1在日志级别的基础上过滤掉trace级别以下的日志 -->
            <level>trace</level>
        </filter>
    </appender>

    <!-- trace级别,按照每天生成日志文件 -->
    <appender name="trace" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--只保留固定配置级别的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>trace</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 之前的  rollingPolicy和triggeringPolicy冲突了  用一个新的标签  结合两者 -->
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}\trace-log-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!-- 日志文件保留天数 -->
            <MaxHistory>5</MaxHistory>
            <!-- 日志文件最大尺寸 -->
            <maxFileSize>10MB</maxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
    </appender>

    <!-- debug级别,按照每天生成日志文件 -->
    <appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--只保留固定配置级别的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>debug</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 之前的  rollingPolicy和triggeringPolicy冲突了  用一个新的标签  结合两者 -->
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}\debug-log-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!-- 日志文件保留天数 -->
            <MaxHistory>5</MaxHistory>
            <!-- 日志文件最大尺寸 -->
            <maxFileSize>10MB</maxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
    </appender>

    <!-- info级别,按照每天生成日志文件 -->
    <appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--只保留固定配置级别的日志 -->
        <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.SizeAndTimeBasedRollingPolicy">
            <!-- 之前的  rollingPolicy和triggeringPolicy冲突了  用一个新的标签  结合两者 -->
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}\info-log-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!-- 日志文件保留天数 -->
            <MaxHistory>5</MaxHistory>
            <!-- 日志文件最大尺寸 -->
            <maxFileSize>10MB</maxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
    </appender>

    <!-- warn级别,按照每天生成日志文件 -->
    <appender name="warn" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--只保留固定配置级别的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 之前的  rollingPolicy和triggeringPolicy冲突了  用一个新的标签  结合两者 -->
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}\warn-log-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!-- 日志文件保留天数 -->
            <MaxHistory>5</MaxHistory>
            <!-- 日志文件最大尺寸 -->
            <maxFileSize>10MB</maxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
    </appender>

    <!-- error级别,按照每天生成日志文件 -->
    <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--只保留固定配置级别的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>error</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 之前的  rollingPolicy和triggeringPolicy冲突了  用一个新的标签  结合两者 -->
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}\error-log-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!-- 日志文件保留天数 -->
            <MaxHistory>5</MaxHistory>
            <!-- 日志文件最大尺寸 -->
            <maxFileSize>10MB</maxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
    </appender>


    <!-- 日志级别排序为: TRACE < DEBUG < INFO < WARN < ERROR -->
    <!-- 日志输出级别 -->
    <root level="trace">
        <appender-ref ref="stdout" />
        <appender-ref ref="trace" />
        <appender-ref ref="debug" />
        <appender-ref ref="info" />
        <appender-ref ref="warn" />
        <appender-ref ref="error" />
    </root>
</configuration>
  • 32
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Monly21

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值