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