Log4j2基本配置

Log4j2基本配置

日志级别

共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF。All:最低等级的,用于打开所有日志记录,OFF:最高等级的,用于关闭所有日志记录,其余可根据需要自己设置

代码调用

public class LogTest {
   private static final Logger log = LogManager.getLogger(LogTest.class);

    public static void main(String[] args) {
        boolean flag = true;
        int i=0;
        while(i<10000){
            ThreadContext.put("userId", String.valueOf(i));
            log.error("日志输出 error:"+i++);
        }
        ThreadContext.clearAll();
    }
}

基本配置说明(xml格式)

<?xml version="1.0" encoding="UTF-8"?>
<!--status为log4j2本身日志级别 monitorInterval为检查log4j2.xml更新配置文件时间(以秒为单位) -->
<Configuration status="error" monitorInterval="10">
    <Appenders>
        <!--控制台输出-->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="[userId:%X{userId}]%-5p - %d{yyyy-MM-dd HH:mm:ss} %c [%t] %l -- %m%n"/>
        </Console>
        <!--文件输出 fileName为当前日志写入的文件,filePattern为归档日志生成的格式-->
        <RollingRandomAccessFile name="RollingFile" fileName="E:\export\Logs\log-test\log-test.log"
                                 filePattern="E:\export\Logs\log-test\log-test-%d{yyyy-MM-dd}-%i.log">
            <!--level="error" :日志级别,onMatch="ACCEPT" :级别在info之上则接受,onMismatch="DENY" :级别在error之下则拒绝-->
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <!--PatternLayout为日志输出的格式-->
            <PatternLayout charset="UTF-8"
                           pattern="[userId:%X{userId}] %-5p - %d{yyyy-MM-dd HH:mm:ss} [%t] %l -- %m%n"/>
            <!--日志归档策略-->
            <Policies>
                <!--按照时间归档 modulate为是否调整格式使得生成下一个归档文件发生在间隔边界上 interval为生成归档文件间隔-->
                <TimeBasedTriggeringPolicy modulate="false" interval="10"/>
                <!--文件达到指定大小后文件发生归档-->
                <SizeBasedTriggeringPolicy size="1024M"/>
            </Policies>
            <!--最多保留归档文件数 超出则之前的会被覆盖 -->
            <DefaultRolloverStrategy max="10"/>
        </RollingRandomAccessFile>
    </Appenders>
    <!--只有在Loggers并引入的appender,appender才会生效,相当于启动入口-->
    <Loggers>
        <!--org.mybatis包error级别才会输出-->
        <logger name="org.mybatis" level="error" additivity="true"></logger>
        <!--org.springframework包下日志只输出error才打印,不设置默认走Root中日志级别输出,additivity需不需要打印此logger继承的父logger-->
        <logger name="org.springframework" level="error" additivity="false">
            <!--当前logger的Appender-->
            <AppenderRef ref="XXXAppender"/>
        </logger>
        <!--父级日志输出,没有指定则都是默认走这个日志级别输出-->
        <Root level="debug" includeLocation="true">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
            <AppenderRef ref="Mail"/>
        </Root>
    </Loggers>
</Configuration>

配置简单说明:

Configuration

status为log4j2本身日志级别,比如设置all启动时可以在控制台看到log4j2对应的加载日志,monitorInterval为检查log4j2.xml更新配置文件时间(以秒为单位),设置10则表示默认每10s重新加载配置文件

Appenders

Appenders里面定义了定义输出内容,输出格式,输出方式,日志保存策略等,上面展示了通常用的两种Console(控制台输出)和RollingRandomAccessFile(文件输出),主要以文件输出作为介绍:

  • RollingRandomAccessFile:文件输出 fileName为当前日志写入的文件,filePattern为归档日志生成的格式
    • ThresholdFilter:表示当前RollingFile下输出日志过滤,如设置为error时,即使logger里面设置为debug,但是只输出error级别的日志
    • PatternLayout:日志输出的格式,参数具体可以网上查,这里面说下%X{userId},代码调用中ThreadContext.put(“userId”, String.valueOf(i)),ThreadContext设置了userId的值,在xml就可以获取到对应的值,ThreadContext类似于java中ThreadLocal,用它可以记录某个请求的特殊信息,比如用户登录信息,这样每个日志就可以清楚的记录对应每个人的操作记录。最后用ThreadContext.clearAll()来清除。
    • Policies:日志归档策略;
      • TimeBasedTriggeringPolicy:按照时间归档,interval为生成归档文件间隔,这里强调下interval的时间单位取决于filePattern中日志输出格式,例如:%d{yyyy-MM-dd-HH-mm}-%i.log则表示interval时间单位是按分钟,%d{yyyy-MM-dd}-%i.log则interval时间单位是按天归档,%i最好加上,不加可能出现同一日期维度超出文件大小归档时产生覆盖,加上归档时会输出xxx-1.log、xxx-2.log;modulate为是否调整格式使得生成下一个归档文件发生在间隔边界上,默认值为1,举个例子:例如filePattern是按照天归档(%d{yyyy-MM-dd}),interval值为8,当前时间为凌晨3:00启动程序日志开始生成,在不考虑文件大小情况下正常情况下第一个归档文件是在11点(3+8),而设置modulate=true时候则在8点就进行第一次归档,这样后面16个小时就能整好输出两次(16/8=2),说的有些啰嗦可以自己验证下。
      • SizeBasedTriggeringPolicy:文件达到指定大小后文件发生归档,单位可以为KB,MB,GB,和上面时间配合使用时,比如上面设置每天归档,则同一时间维度下文件超出限制后就会按照2020-11-11-1.log、2020-11-11-2.log拆分文件。
      • DefaultRolloverStrategy:最多保留归档文件数 超出则之前的会被覆盖.默认是7个文件
Loggers

Loggers是配置的入口,只有定义了logger并引入的appender,appender才会生效。

  1. Root为默认的日志输出配置,没有经过logger配置的包都会走这个输出,例如配置中默认的日志输出级别都是debug。includeLocation配置为true后会打印出对应输出日志的代码行数。includeLocation设置 2. logger:logger相当于自定义的日志,上面配置中org.mybatis包设置对应的日志输出级别为error,additivity="true"表示此error日志会在Root中输出;而org.springframework设置也为error,只不过设置了自己的XXXAppender,文件会输出到对应的日志上,additivity设置为false,如果设置为true,则会出现同样日志输出两份的现象,即自定义logger和Root中的Appender各自输出一份,所以自定子logger如果指定AppenderRef,最好设置additivity=“false”。

           **如果上面描述有问题欢迎评论中批评指正,谢谢!!!**
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值