log4j2的配置文件作业

昨天老师布置了一个作业,就是关于log4j2的,作业是将每一种隔离级别都分开来然后打包。昨天我在官网找了半天还是感觉不大会,我感觉我还是太菜了。

今天是看了同学了,感觉又学到了许多。

作业的核心就是自定义的过滤器。

但是如果是写出来的话,这个东西还是蛮简单的。

  1. log4j源码的下载地址 https://logging.apache.org/log4j/2.x/download.html

  2. 官网里面log4j的例子 https://logging.apache.org/log4j/2.x/manual/configuration.html

最简单的一个例子(这个是官方复制的例子)

启动类

package com.foo;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
 
public class Bar {
  static final Logger logger = LogManager.getLogger(Bar.class.getName());
 
  public boolean doIt() {
    logger.entry();
    logger.error("Did it again!");
    return logger.exit(false);
  }
}

配置文件名字 log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>

有了这个基础之后,我们第二个就是打包需求,例如我每天或者是每个星期打一次包,或者是当这个日志大小大于100M的时候我打一次包。

那么在上面那个配置文件的基础上加入这个

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>

    <RollingFile name="rollingfile" fileName="log.txt"
                       filePattern="logs/.%i.log.gz">
        <PatternLayout>
          <pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</pattern>
        </PatternLayout>
        <SizeBasedTriggeringPolicy size="10MB" />
     </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="Console"/>
      <AppenderRef ref="rollingfile"/>
    </Root>
  </Loggers>
</Configuration>

知道如何打包之后就是使用过滤器了,

<Filters>
    <ThresholdFilter level="ERROR" onMatch="NEUTRAL" onMismatch="DENY"/>
    <ThresholdFilter level="FATAL" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>

这个过滤器有三个参数,第一个是level,就是要过滤的隔离级别,我这里填了ERROR,也就是我只要ERROR的消息。
第二个参数是向上匹配,这里的向上是按照日志的隔离级别来算的

日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL

有了这个基础就可以做出作业了
最后的配置文件就是这样的。

<Configuration status="WARN" monitorInterval="300">
    <properties>
        <property name="LOG_HOME">logs</property>
        <property name="FILE_NAME">mylog</property>
<!--        当日志大于大于这个大小的时候,就打一个包  -->
        <property name="FILE_SIZE">1MB</property>
    </properties>
    <Appenders>
        <!--        控制台输出-->
        <Console name="Console" target="SYSTEM_ERR">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
<!--            过滤器   onMatch是向上匹配 ,onMismatch是向下匹配  NEUTRAL是true DENY是false-->
<!--            <Filters>-->
<!--                <ThresholdFilter level="DEBUG" onMatch="NEUTRAL" onMismatch="DENY"/>-->
<!--                <ThresholdFilter level="INFO" onMatch="DENY" onMismatch="NEUTRAL"/>-->
<!--            </Filters>-->
        </Console>


        <RollingRandomAccessFile name="MyFileFATAL"
                                 fileName="${LOG_HOME}/FATAL/FATAL.log"
                                 filePattern="${LOG_HOME}/FATAL/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}FATAL-%i.zip">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
<!--            触发打包文件 时间和大小-->
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" />
                <SizeBasedTriggeringPolicy size="${FILE_SIZE}" />
            </Policies>
            <DefaultRolloverStrategy max="20" />
            <Filters>
                <ThresholdFilter level="FATAL" onMatch="NEUTRAL" onMismatch="DENY"/>
            </Filters>
        </RollingRandomAccessFile>

        <RollingRandomAccessFile name="MyFileERROR"
                                 fileName="${LOG_HOME}/ERROR/ERROR.log"
                                 filePattern="${LOG_HOME}/ERROR/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}ERROR-%i.zip">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
            <!--            触发打包文件 时间和大小-->
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" />
                <SizeBasedTriggeringPolicy size="${FILE_SIZE}" />
            </Policies>
            <DefaultRolloverStrategy max="20" />
            <Filters>
                <ThresholdFilter level="ERROR" onMatch="NEUTRAL" onMismatch="DENY"/>
                <ThresholdFilter level="FATAL" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
        </RollingRandomAccessFile>
        <RollingRandomAccessFile name="MyFileWARN"
                                 fileName="${LOG_HOME}/WARN/WARN.log"
                                 filePattern="${LOG_HOME}/WARN/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}WARN-%i.zip">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
            <!--            触发打包文件 时间和大小-->
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" />
                <SizeBasedTriggeringPolicy size="${FILE_SIZE}" />
            </Policies>
            <Filters>
                <ThresholdFilter level="WARN" onMatch="NEUTRAL" onMismatch="DENY"/>
                <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <DefaultRolloverStrategy max="20" />
        </RollingRandomAccessFile>
        <RollingRandomAccessFile name="MyFileINFO"
                                 fileName="${LOG_HOME}/INFO/INFO.log"
                                 filePattern="${LOG_HOME}/INFO/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}INFO-%i.zip">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
            <!--            触发打包文件 时间和大小-->
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" />
                <SizeBasedTriggeringPolicy size="${FILE_SIZE}" />
            </Policies>
            <Filters>
                <ThresholdFilter level="INFO" onMatch="NEUTRAL" onMismatch="DENY"/>
                <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <DefaultRolloverStrategy max="20" />
        </RollingRandomAccessFile>
        <RollingRandomAccessFile name="MyFileDEBUG"
                                 fileName="${LOG_HOME}/DEBUG/DEBUG.log"
                                 filePattern="${LOG_HOME}/DEBUG/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}DEBUG-%i.zip">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
            <!--            触发打包文件 时间和大小-->
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" />
                <SizeBasedTriggeringPolicy size="${FILE_SIZE}" />
            </Policies>
            <Filters>
                <ThresholdFilter level="DEBUG" onMatch="NEUTRAL" onMismatch="DENY"/>
                <ThresholdFilter level="INFO" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <DefaultRolloverStrategy max="20" />
        </RollingRandomAccessFile>
        <RollingRandomAccessFile name="MyFileTRACE"
                                 fileName="${LOG_HOME}/TRACE/TRACE.log"
                                 filePattern="${LOG_HOME}/TRACE/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}TRACE-%i.zip">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
            <!--            触发打包文件 时间和大小-->
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" />
                <SizeBasedTriggeringPolicy size="${FILE_SIZE}" />
            </Policies>
            <DefaultRolloverStrategy max="20" />
            <Filters>
                <ThresholdFilter level="TRACE" onMatch="NEUTRAL" onMismatch="DENY"/>
                <ThresholdFilter level="DEBUG" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
        </RollingRandomAccessFile>


    </Appenders>

    <Loggers>
        <Root level="ALL">
            <AppenderRef ref="MyFileFATAL"/>
            <AppenderRef ref="MyFileERROR"/>
            <AppenderRef ref="MyFileWARN"/>
            <AppenderRef ref="MyFileINFO"/>
            <AppenderRef ref="MyFileDEBUG"/>
            <AppenderRef ref="MyFileTRACE"/>

            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

效果如下。
在这里插入图片描述
每一种隔离级别都创建一个文件夹,并且这个文件夹里的日志都是这个隔离级别的日志。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值