Logback配置文件这么写,还说你不会整理日志?

yizhihongxing

当我们开发的应用程序或者服务运行起来后,往往需要记录一些关键的操作日志,或者是出现了异常、错误信息等情况时需要将这些信息记录下来方便我们排查问题。因此,日志对于软件开发和运维是非常重要的。进行日志管理的方式有多种,而 Logback 是一款非常优秀、流行的日志框架。

在项目中使用 Logback 的时候,首先需要配置 Logback 的配置文件。下面是一个完整的 “Logback配置文件这么写,还说你不会整理日志?”攻略:

步骤一:导入依赖

如果是基于 Maven 项目进行开发,需要在 pom.xml 文件中导入 logback-classic 和 logback-core 依赖,如下所示:

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

步骤二:编写 Logback 配置文件

在 src/main/resources 目录下,新建一个名为 logback.xml 的文件,然后按照下面的样例进行配置。该配置文件包括了以下几个部分:

1、定义日志输出格式

<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{35}:%L - %msg%n</pattern>

其中,%d 表示日期时间、%level 表示日志级别、%logger 表示日志名称、%L 表示代码行号、%msg 表示日志消息、%n 表示换行符。这些参数可以根据需要进行定制。

2、定义日志输出的文件名及路径

输出日志文件的路径由 ${LOG_PATH} 定义,可以在 JVM 启动时通过系统变量进行设置。输出日志文件名中包含了 ${DATE} 和 ${PID} 两个变量,它们分别表示日期时间和进程 ID。

<file>${LOG_PATH}/log_${DATE}_${PID}.log</file>

3、定义日志之间的分割方式

<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    <fileNamePattern>${LOG_PATH}/log_%d{yyyyMMdd_HHmmss.SSS}_pid${PID}.%i.log.gz
    </fileNamePattern>
    <maxFileSize>10MB</maxFileSize>
    <maxHistory>15</maxHistory>
    <totalSizeCap>1GB</totalSizeCap>
    <cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>

这里使用了 SizeAndTimeBasedRollingPolicy,表示按照文件大小和时间来分割日志文件。maxFileSize 表示一个日志文件的大小,超过这个大小后就会分割成新的日志文件;maxHistory 表示最多保存的历史日志文件数量;totalSizeCap 表示最大保存日志文件占用的总磁盘空间;cleanHistoryOnStart 表示是否在启动时删除历史日志文件。

4、设置日志级别和输出目标

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_PATH}/log_${DATE}_${PID}.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>${LOG_PATH}/log_%d{yyyyMMdd_HHmmss.SSS}_pid${PID}.%i.log.gz
        </fileNamePattern>
        <maxFileSize>10MB</maxFileSize>
        <maxHistory>15</maxHistory>
        <totalSizeCap>1GB</totalSizeCap>
        <cleanHistoryOnStart>true</cleanHistoryOnStart>
    </rollingPolicy>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{35}:%L - %msg%n</pattern>
    </encoder>
</appender>

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

这里定义了一个名为 FILE 的 appender,使用 RollingFileAppender 实现将日志输出到文件中。同时设置了 root 的日志级别是 INFO,表示只输出 INFO 级别及以上的日志。

步骤三:使用 Logback 进行日志记录

在需要记录日志的地方,创建一个名为 logger 的对象,并使用该对象进行日志输出。

private static final Logger logger = LoggerFactory.getLogger(XXX.class);
logger.info("This is a info log message");
logger.warn("This is a warn log message");

这里直接使用 LoggerFactory 来创建 logger 对象,然后使用不同的级别来输出不同级别的日志信息。

示例说明一:将日志输出到控制台

将 Logback 配置文件中的 appender 改为如下配置,即可将日志信息输出到控制台:

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{35}:%L - %msg%n</pattern>
    </encoder>
</appender>

示例说明二:根据不同的日志级别输出到不同的文件

将 Logback 配置文件中的 appender 改为如下配置,即可将不同的日志级别输出到不同的文件:

<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_PATH}/info_${DATE}_${PID}.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>${LOG_PATH}/info_%d{yyyyMMdd_HHmmss.SSS}_pid${PID}.%i.log.gz
        </fileNamePattern>
        <maxFileSize>10MB</maxFileSize>
        <maxHistory>15</maxHistory>
        <totalSizeCap>1GB</totalSizeCap>
        <cleanHistoryOnStart>true</cleanHistoryOnStart>
    </rollingPolicy>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>INFO</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{35}:%L - %msg%n</pattern>
    </encoder>
</appender>

<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_PATH}/warn_${DATE}_${PID}.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>${LOG_PATH}/warn_%d{yyyyMMdd_HHmmss.SSS}_pid${PID}.%i.log.gz
        </fileNamePattern>
        <maxFileSize>10MB</maxFileSize>
        <maxHistory>15</maxHistory>
        <totalSizeCap>1GB</totalSizeCap>
        <cleanHistoryOnStart>true</cleanHistoryOnStart>
    </rollingPolicy>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>WARN</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{35}:%L - %msg%n</pattern>
    </encoder>
</appender>

<root level="INFO">
    <appender-ref ref="INFO_FILE"/>
    <appender-ref ref="WARN_FILE"/>
</root>

这里定义了 INFO_FILE 和 WARN_FILE 两个 appender,分别表示输出 INFO 和 WARN 级别的日志,并将这两个 appender 关联到了 root 中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Logback配置文件这么写,还说你不会整理日志? - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • 迅雷怎么取消关联mpeg1后缀名文件? 迅雷关联文件的设置方法

    迅雷怎么取消关联mpeg1后缀名文件? 如果你想取消迅雷与mpeg1后缀名文件的关联,可以按照以下步骤进行操作: 打开迅雷软件:首先,确保你已经打开了迅雷软件,并且处于正常的工作状态。 进入设置界面:在迅雷软件的界面上方菜单栏中,找到并点击“工具”选项。在下拉菜单中,选择“选项”以进入设置界面。 打开下载设置:在设置界面中,你会看到多个选项卡。点击左侧导航栏…

    other 2023年8月5日
    00
  • 深入解析MS-SQL锁机制

    深入解析 MS-SQL 锁机制 什么是锁机制 MS-SQL锁机制是指在多个会话同时访问同一数据库资源时,由数据库管理系统负责协调控制对该资源的访问。其目的是确保数据库的一致性和完整性,防止数据冲突和数据损坏。 锁的类型 MS-SQL提供了多种锁类型,包括共享锁、排他锁、意向共享锁、意向排他锁等等。下面将分别对这些锁类型进行介绍。 共享锁 共享锁(Shared…

    other 2023年6月27日
    00
  • c语言printf函数的使用详解

    C语言printf函数的使用详解 在C语言中,printf函数是一种常见的输出函数,可以向屏幕或者文件中输出指定格式的内容。本文将详细讲解printf函数的使用方法,包括格式控制字符串、转换说明符、特殊字符的处理等。 格式控制字符串 printf函数的第一个参数是格式控制字符串,用于指定输出的格式。格式控制字符串以%开始,后面跟着转换说明符,可以有多个。 转…

    other 2023年6月27日
    00
  • 浅谈Angular4中常用管道

    浅谈Angular4中常用管道攻略 简介 管道(Pipes)是Angular中非常有用的特性之一,它们用于转换和格式化数据。在本攻略中,我们将详细讨论Angular4中常用的管道,并提供两个示例说明。 内置管道 Angular4提供了一些内置的管道,可以直接在应用程序中使用。以下是其中一些常用的管道: 1. DatePipe DatePipe用于格式化日期。…

    other 2023年8月17日
    00
  • 详解Qt使用QImage类实现图像基本操作

    详解Qt使用QImage类实现图像基本操作攻略 1. 前言 在Qt中,我们可以使用QImage类来实现图像基本操作,如加载、保存、绘制以及一些简单的处理。本篇攻略将详细讲解QImage类的使用方法。 2. QImage的加载与保存 QImage类提供了多种加载和保存图像的方法,下面介绍两种常用的方法。 2.1 加载图像 使用QImage::load()方法可…

    other 2023年6月26日
    00
  • mbps、kbps、kbps的关系

    Mbps、Kbps、KB/s 是计量数据传输速度的单位,它们之间的关系如下: Mbps(兆比特每秒):表示每秒传输的兆比特数,1 Mbps = 1000 Kbps Kbps(千比特每秒):表示每秒传输的千比特数,1 Kbps = 1000 bps。 KB/s(千字节每秒):表示每秒传输的千字节数,1 KB/s = 8 Kbps。 因此,Mbps 和 K 之间…

    other 2023年5月8日
    00
  • 微信小程序实现文章关注功能详细流程

    followedArticles: [] }, onLoad() { // 从后端接口获取用户关注的文章列表 // … }});“` 以上是实现微信小程序文章关注功能的完整流程。希望对您有所帮助!如果您还有其他问题,请随时提问。

    other 2023年10月17日
    00
  • C++中的拷贝构造函数详解

    C++中的拷贝构造函数详解 拷贝构造函数是C++中一个重要且常用的特殊成员函数。它的作用是在对象被创建的时候,通过一个已有的对象初始化新对象,使得新对象拥有和已有对象一样的属性。下文将详细讨论拷贝构造函数的定义、作用、用法以及示例说明。 拷贝构造函数的定义 拷贝构造函数是一个特殊的构造函数,其形式为: 类名(const 类名& other); 它的参…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部