Log4j2的使用:按时间和大小分割日志,并分包输出

本文详细介绍Log4j2的日志配置方法,包括如何通过Maven引入依赖,配置日志按时间和大小自动分割,以及如何针对不同包设置不同日志级别,实现精细化日志管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、使用到的jar包

<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-core</artifactId>
	<version>2.11.0</version>
</dependency>

<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-api</artifactId>
	<version>2.11.0</version>
</dependency>

2、配置文件的设置

将配置文件log4j2.xml放在maven项目的resource路径下。代码如下:

①按时间和大小分割文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="error">
	<!-- 先定义所有的appender -->
	<appenders>
		<!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面,作为存档,如果不超过size,则此部分日志保存在web.log里面 -->
		<RollingFile name="RollingFile" fileName="log4j2/logs/web.log"
			filePattern="log4j2/logs/$${date:yyyy-MM}/%d{MM-dd-yyyy}-%i.log">
			<!-- pattern = "[ 日志级别 | 类名 | 方法名 | 行数 | 线程名 | 区分客户端 | 时间 ] - 日志信息" -->
			<PatternLayout
				pattern="[ %level{length=1} | %-20class{1} | %-15M | %-2L | %-2t | %X{5} | %d{yyyy-MM-dd HH:mm:ss} ] %msg%n" />
			<Policies>
				<TimeBasedTriggeringPolicy interval="2 hour" />			<!--多长时间滚动一次 -->
				<SizeBasedTriggeringPolicy size="10KB" />		<!-- 一个日志文件的最大大小 -->
			</Policies>
 			<DefaultRolloverStrategy max="20" />   <!-- 文件夹下最多的文件个数 -->
		</RollingFile>
	</appenders>
	<!-- 然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
	<loggers>
		<!-- 建立一个默认的root的logger -->
		<root level="trace">
			<appender-ref ref="RollingFile" />
		</root>
	</loggers>
</configuration>

②按时间和大小分割,并分包打印日志

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="error">
	<!-- 先定义所有的appender -->
	<appenders>
		<!-- 这个输出控制台的配置 -->
		<Console name="Console" target="SYSTEM_OUT">
			<!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
			<ThresholdFilter level="debug" onMatch="ACCEPT"
				onMismatch="DENY" />
			<!-- 这个都知道是输出日志的格式 -->
			<PatternLayout
				pattern="[ %-20class{1} ] %msg%n" />
		</Console>
		<!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面,作为存档 -->
		<RollingFile name="RollingFile-info" fileName="log4j2/info/info.log"
			filePattern="log4j2/info/$${date:yyyy-MM}/%d{MM-dd-yyyy}-%i.log">
			<!-- pattern = "[ 日志级别 | 类名 | 方法名 | 行数 | 线程名 | 区分客户端 | 时间 ] - 日志信息" -->
			<PatternLayout
				pattern="[ %level{length=1} | %-20class{1} | %-15M | %-2L | %-2t | %X{5} | %d{yyyy-MM-dd HH:mm:ss} ] %msg%n" />
			<Policies>
				<TimeBasedTriggeringPolicy interval="2 hour" />			<!--多长时间滚动一次 -->
				<SizeBasedTriggeringPolicy size="10KB" />		<!-- 一个日志文件的最大大小 -->
			</Policies>
			<DefaultRolloverStrategy max="20" />   <!--文件夹下最多的文件个数 -->
		</RollingFile>
		<RollingFile name="RollingFile-debug" fileName="log4j2/debug/debug.log"
			filePattern="log4j2/debug/$${date:yyyy-MM}/%d{MM-dd-yyyy}-%i.log">
			<!-- pattern = "[ 日志级别 | 类名 | 方法名 | 行数 | 线程名 | 区分客户端 | 时间 ] - 日志信息" -->
			<PatternLayout
				pattern="[ %level{length=1} | %-20class{1} | %-15M | %-2L | %-2t | %X{5} | %d{yyyy-MM-dd HH:mm:ss} ] %msg%n" />
			<Policies>
				<TimeBasedTriggeringPolicy interval="2 hour" />			<!--多长时间滚动一次 -->
				<SizeBasedTriggeringPolicy size="10KB" />		<!-- 一个日志文件的最大大小 -->
			</Policies>
			<DefaultRolloverStrategy max="20" />   <!--文件夹下最多的文件个数 -->
		</RollingFile>
		<RollingFile name="RollingFile-error" fileName="log4j2/error/error.log"
			filePattern="log4j2/error/$${date:yyyy-MM}/%d{MM-dd-yyyy}-%i.log">
			<!-- pattern = "[ 日志级别 | 类名 | 方法名 | 行数 | 线程名 | 区分客户端 | 时间 ] - 日志信息" -->
			<PatternLayout
				pattern="[ %level{length=1} | %-20class{1} | %-15M | %-2L | %-2t | %X{5} | %d{yyyy-MM-dd HH:mm:ss} ] %msg%n" />
			<Policies>
				<TimeBasedTriggeringPolicy interval="2 hour" />			<!--多长时间滚动一次 -->
				<SizeBasedTriggeringPolicy size="10KB" />		<!-- 一个日志文件的最大大小 -->
			</Policies>
			<DefaultRolloverStrategy max="20" />   <!--文件夹下最多的文件个数 -->
		</RollingFile>
	</appenders>
	<!-- 然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
	<loggers>
		<!-- 此处name里面的为对应的包名,包名必须和里面的类的package相同 -->
		<logger name="com.test.info" level="debug">
			<!-- ref的值是对应使用的appenders的值 -->
			<appender-ref ref="RollingFile-info"/>
		</logger>
		<logger name="com.test.debug" level="debug" >
			<appender-ref ref="RollingFile-debug"/>
		</logger>
		<logger name="com.test.error" level="debug">
			<appender-ref ref="RollingFile-error"/>
		</logger>
		<!-- 建立一个默认的root的logger -->
		<root level="trace">
			<appender-ref ref="Console" />
		</root>
	</loggers>
</configuration>

3、在代码中使用

①分别创建包com.test.debug,com.test.info,com.test.error。

②分别在三个包下面创建文件DebugLogging.java,InfoLogging.java,ErrorLogging.java。
代码如下:

package com.test.debug;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class DebugLogging {

	private static Logger logger = LogManager.getLogger(DebugLogging.class.getName());
	
	public static void logMessage() {
		logger.debug("debug");
	}
	
}
package com.test.error;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class ErrorLogging {

	private static Logger logger = LogManager.getLogger(ErrorLogging.class.getName());
	
	public static void logMessage() {
		logger.error("error");
	}
	
}
package com.test.info;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class InfoLogging {

	private static Logger logger = LogManager.getLogger(InfoLogging.class.getName());
	
	public static void logMessage() {
		logger.info("info");
	}
	
}	

③在com.test下创建MainTest.java,代码如下:

package com.test;

import com.test.debug.DebugLogging;
import com.test.error.ErrorLogging;
import com.test.info.InfoLogging;

public class MainTest {

	public static void main(String[] args) {
		DebugLogging.logMessage();
		ErrorLogging.logMessage();
		InfoLogging.logMessage();
	}
}

④运行结果如下:

log4j2/debug/debug.log:

[ D | DebugLogging         | logMessage      | 11 | main |  | 2018-10-25 11:21:38 ] debug

log4j2/error/error.log:

[ E | ErrorLogging         | logMessage      | 11 | main |  | 2018-10-25 11:21:38 ] error

log4j2/info/info.log:

[ I | InfoLogging          | logMessage      | 11 | main |  | 2018-10-25 11:21:38 ] info

参考文档:

1、浅谈Log4j和Log4j2的区别:
https://blog.youkuaiyun.com/weixin_38009266/article/details/78485815

2、Log4j输出格式控制--log4j的PatternLayout参数含义以及详细配置:
https://blog.youkuaiyun.com/reserved_person/article/details/52849505

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值