• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

java集成log4j2

武飞扬头像
MpenggegeM
帮助1

java集成log4j2

log4j2功能较好,可配置异步日志,无垃圾模式,等等,现在主流为slf4j log4j2实现日志框架

导入maven坐标

  	<!-- log4j2日志门面 -->
  	<dependency>
  		<groupId>org.apache.logging.log4j</groupId>
		<artifactId>log4j-api</artifactId>
		<version>2.11.1</version>
  	</dependency>
  	<!-- log4j2日志实现 -->
  	<dependency>
		<groupId>org.apache.logging.log4j</groupId>
		<artifactId>log4j-core</artifactId>
		<version>2.11.1</version>
	</dependency>

配置log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- 框架默认级别为warn   自动加载配置文件的间隔时间,不低于5s,修改配置文件后无需重新发动应用,可以自动加载-->
<configuration status="debug" monitorInterval="5">
	
	<properties>
		<property name="LOG_HOME">D:/logs</property>
	</properties>
	
	<!--先定义所有的appender -->
	<appenders>
		<!--这个输出控制台的配置 -->
		<Console name="Console" target="SYSTEM_OUT">
			<!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
			<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
			<!-- 日志的格式 -->
			<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
		</Console>
		<!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用 -->
		<!--append为TRUE表示消息增加到指定文件中,false表示消息覆盖指定的文件内容,默认值是true -->
		<File name="log" fileName="${LOG_HOME}/log4j2.log" append="false">
			<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
		</File>
		<!--添加过滤器ThresholdFilter,可以有选择的输出某个级别以上的类别 onMatch="ACCEPT" onMismatch="DENY"意思是匹配就接受,否则直接拒绝 -->
		<File name="ERROR" fileName="${LOG_HOME}/error.log">
			<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
			<PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
		</File>
		<!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
		<RollingFile name="RollingFile" fileName="${LOG_HOME}/roll.log" filePattern="D:/logs/$${date:yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz">
			<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
			<Policies>
				<!-- 发动时自动生成新文件 -->
				<OnStartupTriggeringPolicy />
				<SizeBasedTriggeringPolicy size="10MB"/>
				<!-- 按时间节点拆分 -->
				<TimeBasedTriggeringPolicy />
			</Policies>
			<DefaultRolloverStrategy max="30"/>
		</RollingFile>
		
		<!-- 异步日志 -->
		<!-- <Async name="Async">
			<appender-ref ref="RollingFile"/>
		</Async> -->
	</appenders>
	<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
	<loggers>
	
		<!-- 自定义异步logger对象 -->
		<!-- includelocation 记录行号
			additivity 继承rootloggger
		 -->
		<AsyncLogger name="cn.sp" level="trace" includelocation="false" additivity="false">
			<AppenderRef ref="RollingFile" />
		</AsyncLogger>
		<root level="trace">
			<!-- <appender-ref ref="Async"/> -->
			<appender-ref ref="Console"/>
			<appender-ref ref="ERROR" />
			<appender-ref ref="log"/>
		</root>
	</loggers>
</configuration>
学新通

测试

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

public class TestLog4j2 {
	
	public static final Logger log =  LogManager.getLogger(TestLog4j2.class);
	
	@Test
	public void testLog4j2() {
		log.trace("log4j2日志输出:This is trace message."); // 记录debug级别的信息
		log.debug("log4j2日志输出:This is debug message."); // 记录info级别的信息
		log.info("log4j2日志输出:This is info message."); // 记录error级别的信息
		log.error("log4j2日志输出:This is error message."); 
	}
}
学新通

异步日志

1.导入异步日志的maven坐标依赖

	<!-- 异步日志 -->
	<dependency>
		<groupId>com.lmax</groupId>
		<artifactId>disruptor</artifactId>
		<version>3.3.4</version>
	</dependency>

2.如上配置文件所示,可配置异步日志async
注意不要记录代码行号,影响效率。
3.也可配置uan局异步日志
在resource目录下加入log4j2.component.properties
配置:

#uan局异步配置
#Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

使用slf4j作为日志门面来配置log4j2

1.导入slf4j maven坐标

<!-- slf4j日志门面 -->
  	<dependency>
  		<groupId>org.slf4j</groupId>
  		<artifactId>slf4j-api</artifactId>
  		<version>1.7.26</version>
  	</dependency>
  	
  	<!-- slf4j-log4j2的适配绑定 -->
  	<dependency>
  		<groupId>org.apache.logging.log4j</groupId>
  		<artifactId>log4j-slf4j-impl</artifactId>
  		<version>2.9.1</version>
  	</dependency>

2.测试

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TestSlf4jLog4j2 {
	
	public static final Logger log = LoggerFactory.getLogger(TestSlf4jLog4j2.class);
	
	@Test
	public void testSlf4jLog4j2() {
		log.error("error");
		log.warn("warn");
		log.info("info");
		log.debug("debug");
		log.trace("trace");
	}
	
}

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgighci
系列文章
更多 icon
同类精品
更多 icon
继续加载