log4j2

log4j2maven依赖

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

log4j2.xml配置文件详解

详细配置可参考:https://blog.csdn.net/chushoutaizhong/article/details/79865551

<?xml version="1.0" encoding="UTF-8"?>
<!-- status : 指定log4j本身的打印日志的级别.ALL< Trace < DEBUG < INFO < WARN < ERROR
< FATAL < OFF。 monitorInterval : 用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s. -->
<Configuration status="ALL" monitorInterval="30">
	<!--https://blog.csdn.net/vbirdbest/article/details/71751835 -->
	<properties>
		<!--定义日志文件输出的路径 -->
		<property name="LOG_HOME">D:/test/logs</property>
		<!--定义日志文件输出的文件名称 -->
		<property name="FILE_NAME">log</property>
		<!-- 输出日志的格式 %d{yyyy-MM-dd HH:mm:ss.SSS}: 表示打log时的时间毫秒 [%t]:输出当前线程名称 %-5level:输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0 
				%C:类全名 %L:输出行号 %M:输出所在方法名 %msg:日志文本 %n:输出换行符 -->
		<property name="MSG_PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %C %L %M - %msg%n</property>
	</properties>


	<Appenders>
		<!--这个输出控制台的配置 -->
		<Console name="Console" target="SYSTEM_OUT">
			<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
			<ThresholdFilter level="debug" onMatch="ACCEPT"
				onMismatch="DENY" />
			<PatternLayout
				pattern="${MSG_PATTERN}" />
		</Console>
		<!--这个只会会打印出info级别的所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
		<!--随机滚动日志文件:name:这个appender的name,用于logger的root配置;fileName:日志文件名称(在日志文件外面显示的);filePattern:存档日志文件的路径以及名称-->
		<RollingRandomAccessFile name="InfoFile"
			fileName="${LOG_HOME}/info.log"
			filePattern="${LOG_HOME}/$${FILE_NAME}/${FILE_NAME}-info-%d{yyyy-MM-dd}-%i.log">
			<!--日志级别过滤,下面这种配置方式,就可以实现,这个日志文件里面只打印info级别的信息deny:拒绝;accept:接受;neutral:中立  -->
			<Filters>
				 <ThresholdFilter level="warn" onMatch="DENY"
					onMismatch="NEUTRAL" />
				 <ThresholdFilter level="info" onMatch="ACCEPT"
					onMismatch="DENY" /> 
			</Filters>
			<!--日志输出个格式  -->
			<PatternLayout
				pattern="${MSG_PATTERN}" />
			<!--日志滚动策略:多个策略
			TimeBasedTriggeringPolicy表示按照时间间隔来进行日志文件的滚动,间隔单位可以是分钟、小时,具体需要根据filePattern的格式来进行判别;
				例如filePattern="e:/app-%d{yyyy-MM-dd_HH-mm}-%i.out",则表示mm(分钟)为单位;
				interval:表示分隔日志的时间间隔大小,如果时间间隔单位是分钟,则表示相隔1分钟、10分钟等进行一次日志分隔;
				modulate:表示是否对分隔时间进行调制;如果设置为true则表示分隔的时间从每天的0点、每小时的0分钟开始进行计算,每间隔多久进行一次切割;比如,modulate=true,interval=4hours,那么假设上次封存日志的时间为03:00,则下次封存日志的时间为04:00,之后的封存时间依次为08:00,12:00,16:00。。。
			CronTriggeringPolicy:表示日志文件按照设置的时间点来进行滚动;
			SizeBasedTriggeringPolicy表示按照规定的日志文件大小进行切割日志;
				size:表示进行切割日志文件大小的极值,当日志文件大小满足size的值时,就会进行日志的切割;
			DefaultRolloverStrategy表示log4j2每单位时间内最多能保存多少个日志切割文件
			  -->
			 <Policies>
			 <!--一天滚一次,单个文件大于20MB滚一次  -->
				<TimeBasedTriggeringPolicy interval="1"/>
				<SizeBasedTriggeringPolicy size="20MB" />
			</Policies> 
			<!-- 文件夹里面最多保留有14个文件 -->
			<DefaultRolloverStrategy max="14" /> 
			<!--配置删除修改时间在多少age以上的日志文件  -->
			<!-- <DefaultRolloverStrategy>
                <Delete basePath="${LOG_HOME}" maxDepth="2">
                    <IfFileName glob="*/$${FILE_NAME}/${FILE_NAME}-*.log" />
                    <IfLastModified age="1s" />
                </Delete>
            </DefaultRolloverStrategy> -->
		</RollingRandomAccessFile>
		
		<!--这个只会会打印出warn级别以上的所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
		<RollingRandomAccessFile name="ErrorFile"
			fileName="${LOG_HOME}/error.log"
			filePattern="${LOG_HOME}/$${FILE_NAME}/${FILE_NAME}-error-%d{yyyy-MM-dd}-%i.log">
			<Filters>
				<ThresholdFilter level="warn" onMatch="ACCEPT"
					onMismatch="DENY" />
			</Filters>
			<PatternLayout
				pattern="${MSG_PATTERN}" />
			<Policies>
				<TimeBasedTriggeringPolicy interval="1" />
				<SizeBasedTriggeringPolicy size="20MB" />
			</Policies>
			<DefaultRolloverStrategy max="14" /> 
		</RollingRandomAccessFile>
	</Appenders>

	<Loggers>
	<!--跟日志,所有的appeder都继承这个rootlogger  -->
		<Root level="trace">
            <AppenderRef ref="Console" />
            <AppenderRef ref="InfoFile" />
            <AppenderRef ref="ErrorFile" />
        </Root>
	</Loggers>
</Configuration>

Java代码使用

private final static Logger logger = LogManager.getLogger(Log4j2Test.class);

package utilclass;

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

public class Log4j2Test {
	private final static Logger logger = LogManager.getLogger(Log4j2Test.class);

	public static void start() {
		long beginTime = System.currentTimeMillis();

		for (int i = 0; i < 100; i++) {
			logger.trace("trace level");
			logger.debug("debug level");
			logger.info("info level");
			logger.warn("warn level");
			logger.error("error level");
			logger.fatal("fatal level");
		}

		logger.info("请求处理结束,耗时:{}毫秒", (System.currentTimeMillis() - beginTime)); // 第一种用法
		logger.debug("请求处理结束,耗时:" + (System.currentTimeMillis() - beginTime) + "毫秒"); // 第二种用法
		logger.warn("请求处理结束,耗时:" + (System.currentTimeMillis() - beginTime) + "毫秒"); // 第二种用法
		logger.error("请求处理结束,耗时:" + (System.currentTimeMillis() - beginTime) + "毫秒"); // 第二种用法

	}

	public static void main(String[] args) {
		new Thread(new Runnable() {

			@Override
			public void run() {
				while (true) {

					start();
				}
			}
		}).start();
		new Thread(new Runnable() {

			@Override
			public void run() {
				while (true) {

					start();
				}
			}
		}).start();

	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值