Maven项⽬配置l
log4j2相对于log4j 1.x有了脱胎换⾻的变化,其官⽹宣称的优势有多线程下10⼏倍于log4j 1.x和logback的⾼吞吐量、可配置的审计型⽇志、基于插件架构的各种灵活配置等。
以下是log4j2在maven 项⽬中的配置步骤:
1、在l⽂件中引⼊log4j依赖
<!-- mvnrepository/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.10.0</version>
</dependency>
<!-- mvnrepository/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.10.0</version>
</dependency>
<!-- mvnrepository/artifact/org.apache.logging.log4j/log4j-web -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.10.0</version>
</dependency>
<!-- mvnrepository/artifact/com.lmax/disruptor -->
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.4.1</version>
</dependency>
2、配置l⽂件放置到src/main/resources⽬录下
<?xml version="1.0" encoding="UTF-8"?>
<!--
status : 这个⽤于设置log4j2⾃⾝内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出
monitorInterval : Log4j能够⾃动检测修改配置⽂件和重新配置本⾝, 设置间隔秒数。
-->
<Configuration status="WARN" monitorInterval="600">
<Properties>
<!-- 配置⽇志⽂件输出⽬录 -->
<Property name="LOG_HOME">${sys:catalina.home}/WebAppLogs/</Property>
</Properties>
<Appenders>
<!--这个输出控制台的配置-->
<Console name="Console" target="SYSTEM_OUT">
<!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<!-- <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>-->
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="ACCEPT"/>
<!-- 输出⽇志的格式 -->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</Console>
<!-- 设置⽇志格式并配置⽇志压缩格式(service.log.年份.gz) -->
<RollingRandomAccessFile name="service_appender"
fileName="${LOG_HOME}/service.log"
filePattern="${LOG_HOME}/service.log.%d{yyyy-MM-dd}.">
<!--
%d{yyyy-MM-dd HH:mm:ss, SSS} : ⽇志⽣产时间
%p : ⽇志输出格式
%c : logger的名称
%m : ⽇志内容,即 logger.info("message")
%n : 换⾏符
%C : Java类名
%L : ⽇志输出所在⾏数
%M : ⽇志输出所在⽅法名
hostName : 本地机器名
hostAddress : 本地ip地址
-->
<PatternLayout>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M -- %msg%xEx%n</pattern>
</PatternLayout>
log4j2 delete<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
<!-- <TimeBasedTriggeringPolicy interval="1" modulate="true" /> -->
</Policies>
</RollingRandomAccessFile>
<!-- DEBUG⽇志格式 -->
<RollingRandomAccessFile name="service_debug_appender"
fileName="${LOG_HOME}/service.log"
filePattern="${LOG_HOME}/service.log.%d{yyyy-MM-dd}.">
<PatternLayout>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M -- %msg%xEx%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<!-- 配置⽇志的根节点 -->
<root level="error">
<appender-ref ref="Console"/>
<appender-ref ref="service_appender" level="error"/>
</root>
<!-- 第三⽅⽇志系统 -->
<logger name="" level="info"/>
<logger name="org.springframework.beans" level="info"/>
<logger name="t" level="info"/>
<logger name="org.springframework.web" level="info"/>
<logger name="org.jbossty" level="warn"/>
<logger name="org.apache.http" level="warn"/>
<!-- ⽇志实例(info),其中'service-log'继承root,但是root将⽇志输出控制台,⽽'service-log'将⽇志输出到⽂件,通过属性'additivity="false"'将'service-log'的的⽇志不再输出到控制台 -->
<logger name="service_info_log" level="info" includeLocation="true" additivity="true">
<appender-ref ref="service_appender"/>
</logger>
<!-- ⽇志实例(debug) -->
<logger name="service_debug_log" level="debug" includeLocation="true" additivity="true">
<appender-ref ref="service_debug_appender"/>
</logger>
</Loggers>
</Configuration>
上⾯的l中以Configuration为根节点,有⼀个status属性,这个属性表⽰log4j2本⾝的⽇志信息打印级别。如果把status改为TRACE再执⾏测试代码,可以看到控制台中打印了⼀些log4j加载插件、组装logger等调试信息。
⽇志级别从低到⾼分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出。对于Loggers中level的定义同样适⽤。
上⾯配置了两种⽇志打印的⽅式,打印的等级是error。
Console:在命令⾏打印
RollingRandomAccessFile:打印到⽂件中
Rolling的意思是当满⾜⼀定条件后,就重命名原⽇志⽂件⽤于备份,并从新⽣成⼀个新的⽇志⽂件。例如需求是每天⽣成⼀个⽇志⽂件,但是如果⼀天内的⽇志⽂件体积已经超过1G,就从新⽣成,两个条件满⾜⼀个即可。这在log4j 1.x原⽣功能中⽆法实现,在log4j2中就很简单了。
RollingRandomAccessFile的属性:
fileName 指定当前⽇志⽂件的位置和⽂件名称
filePattern 指定当发⽣Rolling时,⽂件的转移和重命名规则
SizeBasedTriggeringPolicy 指定当⽂件体积⼤于size指定的值时,触发Rolling
DefaultRolloverStrategy 指定最多保存的⽂件个数
TimeBasedTriggeringPolicy 这个配置需要和filePattern结合使⽤,注意filePattern中配置的⽂件重命名规则是
${log_path}/zcrTest%d{yyyy-MM-dd}.log,最⼩的时间粒度是dd,即分钟,TimeBasedTriggeringPolicy指定的size是1,结合起来就是每⼀天⽣成⼀个新⽂件。如果改成%d{yyyy-MM-dd HH},最⼩粒度为⼩时,则每⼀个⼩时⽣成⼀个⽂件。
3、配置xml⽂件的扫描路径
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<!--扫描配置⽂件所在的⽬录-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
4、在l⽂件中listener
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>{l所在⽬录}/l</param-value>
</context-param>
<listener>
<listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class> </listener>
<filter>
<filter-name>log4jServletFilter</filter-name>
<filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>log4jServletFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
5、测试调⽤
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
private static Logger logger = Logger(APIV1Filter.class);
logger.info(..);
<(..)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论