log4j2配置

本文详细介绍了Log4j2的日志配置方法,包括配置文件结构解析、日志级别设置、过滤器使用、日志输出格式及日志备份策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的项目中的log4j配置如下:

<configuration status="off"> <!--status=debug可以查看log4j的装配过程-->
<Properties>  <!--指定日志打印的路径--> 
<Property name="logdir">${catalina.base}/logs</Property> </Properties> 
<Appenders> 
       <Console name="Console" target="SYSTEM_OUT"> <!---->    
           <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />     
           <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %level [%file] - %msg%n" />     
        </Console>
 
      <RollingFile 
     name="RollingFile"
     fileName="${logdir}/hloa.log" filePattern="${logdir}/hloa.%d{yyyy-MM-dd}.log"> 
           <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %level [%C{36}.%M] - %msg%n" /> 
           <Filters>
             <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL" /> 
             <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" /> 
           </Filters> 
           <Policies> 
            <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
           </Policies>
         </RollingFile> 
<!-- 只显示error级别的信息 -->
         <RollingFile name="RollingFileError" 
         fileName="${logdir}/error.log" append="false"  <!--这个log每次运行程序会自动清空,由append属性决定-->
        filePattern="${logdir}/error-%d{yyyy-MM-dd}.log"> 
         <PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss.SSS} [%thread] %level [%C{36}.%M:%L] - %msg%xEx%n" />
             <Filters> <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
               <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" /> 
             </Filters> 
             <Policies>
             <TimeBasedTriggeringPolicy modulate="true" interval="1"/> 
             </Policies>
             </RollingFile> 
     </Appenders>
 
       <Loggers> 
             <Logger name="com.hl" level="debug" /> <!--建立一个默认的root的logger--> 
                 <Root level="debug" additivity="false"> <!-- 表示log只打印到本log的appender中,而不再打印到其父logger的appender -->
                     <AppenderRef ref="Console" />
                     <AppenderRef ref="RollingFile" />
                     <AppenderRef ref="RollingFileError" />
                 </Root> 
        </Loggers>
 </configuration>

    日志级别:           

              trace: 是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出。

    debug: 调试么,我一般就只用这个作为最低级别,trace压根不用。实在没办法就用eclipse或者idea的debug功能就好了么。

    info: 输出一下你感兴趣的或者重要的信息,这个用的最多了。

    warn: 有些信息不是错误信息,但是也要给程序员的一些提示,类似于eclipse中代码的验证不是有error 和warn(不算错误但是也请注意,比如以下             depressed的方法)。

    error: 错误信息。用的也比较多。

    fatal: 级别比较高了。重大错误,这种级别你可以直接停止程序了,是不应该出现的错误么!不用那么紧张,其实就是一个程度的问题。


节点分类:

 1)根节点configuration,然后有两个子节点:appenders和loggers(都是复数,意思就是可以定义很多个appender和logger了)(如果想详细的看一下这个xml的结构,可以去jar包下面去找xsd文件和dtd文件)

  2)appenders:这个下面定义的是各个appender,就是输出了,有好多类别,这里也不多说(容易造成理解和解释上的压力,一开始也未必能听懂,等于白讲),先看这个例子,只有一个Console,这些节点可不是随便命名的,Console就是输出控制台的意思。然后就针对这个输出设置一些属性,这里设置了PatternLayout就是输出格式了,基本上是前面时间,线程,级别,logger名称,log信息等,差不多,可以自己去查他们的语法规则。

  3)loggers下面会定义许多个logger,这些logger通过name进行区分,来对不同的logger配置不同的输出,方法是通过引用上面定义的logger,注意,appender-ref引用的值是上面每个appender的name,而不是节点名称。

ThresholdFilter 中参数设置:

字段描述
level输出级别,例:level=”info”,日志级别为info或者以上(匹配的界别)
onMatchDENY/ACCEPT 禁止或者接受(是否接受匹配)
onMismatchDENY/NEUTRAL (是否接受其他高于level的级别)

一般的组合为:

  • onMatch=”DENY” onMismatch=”NEUTRAL “
  • onMatch=”ACCEPT ” onMismatch=”DENY” 
     <Console name="Console" target="SYSTEM_OUT"> <!---->    
           <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />     
           <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %level [%file] - %msg%n" />     
        </Console>

如上所示:如果onMatch=”ACCEPT ” 就代表输出info以及以上级别的日志  onMismatch=”DENY” 不匹配的info以下就拒绝显示。

如果设置为  onMismatch=”NEUTRAL “ 就可以显示全部级别的日志。

变量以及日志备份:

Properties可以制定公共变量后面可以使用${}引用此变量,如下:

   <Properties>
        <Property name="logdir">base/logs</Property>
    </Properties>
    <Appenders>
         <RollingFile name="RollingFile"
            fileName="${logdir}/hloa.log"
            filePattern="${logdir}/hloa.%d{yyyy-MM-dd}.log">
            <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %level [%C{36}.%M] - %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy modulate="true" interval="1"/>  
            </Policies>
        </RollingFile>  
   .............

如上所示使用${logdir}引用了上面的变量,fileName制定了日志以后打印在此路径之下。filepatten是备份日志的路径以及名称,备份的的触发条件是按时间备份 interval="1"是1天备份一份。也可以制定按大小备份  <SizeBasedTriggeringPolicy size="100 MB" />  意思每到100MB备份一个日志

内容详情:

pattern格式配置 
%d{yyyy-MM-dd HH:mm:ss.SSS} “d”, “date” 时间格式 
%-5level “p”, “level” 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0 
%class{1.} “C”, “class” 类名,包名只有1位 
%C{3} 获取类名前3级目录(包含类名) 
%L “L”, “line” 输出行号 
%M “M”, “method” 输出所在方法名 
%m “m”, “msg”, “message” 日志文本 
%xEx “xEx”, “xThrowable”, “xException” ExtendedThrowablePatternConverter 
“ex”, “throwable”, “exception” ThrowablePatternConverter 
“rEx”, “rThrowable”, “rException” RootThrowablePatternConverter 
%n 换行

其他占位符有(部分): 
%l “l”, “location” 输出语句所在的行数, 包括类名、方法名、文件名、行数 例如:hahaha.Log4j2Test.main(Log4j2Test.java:15) 
%T “T”, “tid”, “threadId” 输出线程ID 
%t “t”, “tn”, “thread”, “threadName” 输出当前线程名称 
%tp “tp”, “threadPriority” 输出线程权级 
%F “F”, “file” 输出所在的类文件名,如Log4j2Test.java 
%logger “c”, “logger” 输出logger名称,LogManager.getLogger(Log4j2Test.class);中的名称,此处是hahaha.Log4j2Test 
%N “N”, “nano” 纳秒 
%sn “sn”, “sequenceNumber” 日志计数(全局) 
%u “u”, “uuid” UUID(全局) 
%X{ip} “X”, “mdc”, “MDC” MDC方式获取ip(等同于 %MDC{ip} 和 %mdc{ip} ) 
%x “x”, “NDC” NDC方式
现在你会配置log4j2了吗?欢迎留言交流。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值