vlambda博客
学习文章列表

Log4j2 的分模块/分包日志输出

简介
log4j2是log4j 1.x和logback的改进版,据说采用了一些新技术(无锁异步、等等),使得日志的吞吐量、性能比log4j 1.x提高10倍,并解决了一些死锁的bug,而且配置更加简单灵活。


由于旧项目使用的是SSH框架,产品设计的业务模块较多,后端工程庞大,如果日志全部输出到一个日志文件的话,后期的问题排查会显得异常麻烦。所以需要把相互独立的业务模块,日志分开输出。
工程中引入log4j2,pom文件如下:
<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日志级别:

从大到小依次是: error, warn, info, debug, trace

配置文件结构:

  1. Appdenders部分

    1. Filter

    2. Layout

    3. Policies

    4. Strategy

    5. Appender

  2. Loggers部分

    1. Logger

    2. RootLogger

这里就要了解一下log4j的主要配置属性了,这里我们主要用到的是RollingRandomAccessFile属性

    name:Appender名称

    immediateFlush:log4j2接收到日志事件时,是否立即将日志刷到磁盘。默认为true。

    fileName:日志存储路径

    filePattern:历史日志封存路径。其中%d{yyyyMMddHH}表示了封存历史日志的时间单位(目前单位为小时,yyyy表示年,MM表示月,dd表示天,HH表示小时,mm表示分钟,ss表示秒,SS表示毫秒)。注意后缀,log4j2自动识别zip等后缀,表示历史日志需要压缩。

示例:

<RollingRandomAccessFile name="ceshi" immediateFlush="false" fileName="${sys:catalina.base}/logs/ceshi.log" filePattern="${sys:catalina.base}/logs/ceshi.log.%d{yyyy-MM-dd}" > <PatternLayout pattern="${pattern}" /> <Policies> <TimeBasedTriggeringPolicy interval="1" /> </Policies> </RollingRandomAccessFile>

loggers属性的配置

logger标签:
name属性: 包名路径(此处可根据不同业务指定不同的包名输出)
level属性: 日志输出级别,一般为info
additivity属性: 它是 子Logger 是否继承 父Logger 的 输出源(appender) 的标志位。具体说,默认情况下子Logger会继承父Logger的appender,也就是说子Logger会在父Logger的appender里输出。若是additivity设为false,则子Logger只会在自己的appender里输出,而不会在父Logger的appender里输出。

appender-ref标签:指定适配器名称

示例:

    <logger name="com.seven7.ceshi" level="info" additivity="false">        <appender-ref ref="ceshi" /> </logger>


这样配置后,在指定的包 com.seven7.ceshi及其子路径下,使用log4j2输出的日志会打印到 ${sys:catalina.base}/log s/ceshi.log文件中。




log4j的功能其实非常强大,这里只是记录了分模块输出日志的简单配置,其他方面的内容后面会陆续更新。



欢迎分享关注