Log4J2日志整合及配置详解

简介

log4j2是log4j 1.x 的升级版,2015年5月,Apache宣布log4j1.x 停止更新。最新版为1.2.17。

log4j2参考了logback的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升,主要有:
1、异常处理:在logback中,Appender中的异常不会被应用感知到,但是在log4j2中,提供了一些异常处理机制。
2、性能提升:log4j2相较于log4j 1和logback都具有很明显的性能提升。
3、自动重载配置:参考了logback的设计,提供自动刷新参数配置,可以动态的修改日志的级别而不需要重启应用。
4、无垃圾机制,log4j2在大部分情况下,都可以使用其设计的一套无垃圾机制,避免频繁的日志收集导致的jvm gc。

添加log4j2相关jar包

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

调用log4j2功能代码

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

private static Logger logger= LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);

配置说明

加载配置文件流程如下:

Log4j将检查“Log4j的配置文件“系统属性,如果设置,将尝试加载配置使用 ConfigurationFactory 匹配的文件扩展。
如果没有系统属性设置JSON ConfigurationFactory log4j2-test将寻找。 json或 log4j2-test。json在类路径中。
如果没有这样的文件发现XML ConfigurationFactory log4j2-test将寻找。 xml在 类路径。
如果一个测试文件无法找到JSON ConfigurationFactory log4j2将寻找。 log4j2.jsn json或 在类路径中。
如果一个JSON文件无法找到XML ConfigurationFactory将试图定位 log4j2。 xml在类路径中。
如果没有配置文件可以找到了 DefaultConfiguration 将被使用。 这将导致日志输出到控制台

本文以log4j2.yaml 为案例

Log4j2如果要解析yaml文件要添加如下依赖

<dependency>
      <groupId>com.fasterxml.jackson.dataformat</groupId>
      <artifactId>jackson-dataformat-yaml</artifactId>
      <version>2.9.8</version>
</dependency>
<dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.8</version>
</dependency>

1、XML配置

<!-- status用来指定log4j2本身的打印日志的级别.
monitorinterval Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<Configuration status="WARN" monitorinterval=“30”>
	<Appenders>
	<!--Console标签是设置控制台输出的,属性name是设置其名字,target是设置其输出模式-->
	<Console name="console" target="system_out">
	    <!--PatternLayout标签是设置控制台输出格式-->
		<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %l - %msg%n" />
		<!--ThresholdFilter标签是设置其输出级别过滤,
		属性onMatch值是accept表示接收info级别以上的,
		属性onMismatch值是deny表示不接收info级别以下的,
		-->
		<ThresholdFilter level="debug" onMatch="accept" onMismatch="deny" />
	</Console>
	
    <!--File标签是设置输出文件,属性name是设置其名字,fileName是设置文件路径,append表示是否追加输出,true追加,false不追加-->
	<File name="Log" fileName="logs/test.log" append="false">
		<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{36} %L %M - %msg%n" />
	</File>

    <!--RollingFile标签是设置回滚文件,属性name是设置其名字,fileName是设置文件路径,filePattern表示回滚文件文件名格式-->
	<RollingFile name="RollingFileInfo" fileName="logs/info.log" filePattern="logs/info-%d{yyyy-MM-dd}.log">
		<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
		<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %class{36} - %l - %msg%n" />
		<!-- Policies :日志滚动策略-->
		<Policies>
			    <!-- 时间滚动策略,默认0点小时产生新的文件,
			    interval="6" : 自定义文件滚动时间间隔,每隔6小时产生新文件, 
			    modulate="true" : 产生文件是否以0点偏移时间,即6点,12点,18点,0点-->
                <TimeBasedTriggeringPolicy interval="6" modulate="true"/>
                <!--文件大小滚动策略-->
			   <SizeBasedTriggeringPolicy size="100 MB"/>
		</Policies>
		<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
         <DefaultRolloverStrategy max="20"/>
	</RollingFile>
</Appenders>

<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
<Loggers>
		 <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
        <!--Logger节点用来单独指定日志的形式,name为包路径,比如要为org.springframework包下所有日志指定为INFO级别等。 -->
        <logger name="org.springframework" level="INFO"></logger>
        <logger name="org.mybatis" level="INFO"></logger>
        <!-- Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出 -->
		<Root level="info">
			<AppenderRef ref="Console" />
			<AppenderRef ref="RollingFileInfo" />
		</Root>
		 <!--AsyncLogger :异步日志,LOG4J有三种日志模式,全异步日志,混合模式,同步日志,性能从高到底,线程越多效率越高,也可以避免日志卡死线程情况发生-->
        <!--additivity="false" : additivity设置事件是否在root logger输出,为了避免重复输出,可以在Logger 标签下设置additivity为”false”-->
        <AsyncLogger name="AsyncLogger" level="trace" includeLocation="true" additivity="false">
            <appender-ref ref="RollingFileError"/>
        </AsyncLogger>
</Loggers>
</Configuration>

1、XML配置

发布了34 篇原创文章 · 获赞 0 · 访问量 1353

猜你喜欢

转载自blog.csdn.net/qq_41071876/article/details/105376862
今日推荐