log4j2的配置文件作业

作者:神秘网友 发布时间:2020-10-15 22:34:58

log4j2的配置文件作业

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>

效果如下。
log4j2的配置文件作业
每一种隔离级别都创建一个文件夹,并且这个文件夹里的日志都是这个隔离级别的日志。

log4j2的配置文件作业相关教程

  1. 使用Windows At Command计划作业和任务

    使用Windows At Command计划作业和任务 Linux have the same command for same reasons to schedule commands and jobs for specified times and periods. Windows have the same command with similar usage too. Alternative to this command is schtasks c

  2. springboot整合log4j2

    springboot整合log4j2 相比与其他的日志系统,log4j2丢数据这种情况少;disruptor技术,在多线程环境下,性能高于logback等10倍以上;利用jdk1.5并发的特性,减少了死锁的发生; 可以看到在同步日志模式下, Logback的性能是最糟糕的. log4j2的性能无论在同步

  3. linux怎么删掉配置文件_如何在Linux中删除文件?

    linux怎么删掉配置文件_如何在Linux中删除文件? linux怎么删掉配置文件 Deleting files in Linux can be sometimes tricky. We have a tool named rmwhich is the shortcut for the word remove. In this tutorial, we will look at how to remove or delete

  4. cron 排除日期_对Cron作业日志进行故障排除和检查

    cron 排除日期_对Cron作业日志进行故障排除和检查 cron 排除日期 cron is a very useful tool and mechanism to schedule jobs in a Linux operating system. cron can run scripts, commands, binaries if set properly. But in some cases, there may be so

  5. java—web—数据库(作业)

    java—web—数据库(作业) 需求: 实现代码: create database mybankcreate table bank(customerName varchar(20) comment'用户姓名',currentMoney int(8) comment'余额')charset='utf8'insert into bank(customerName,currentMoney) values('张三',1000),(

  6. 编译原理课程作业-Cminus语言的词法及语法分析器实现

    编译原理课程作业-Cminus语言的词法及语法分析器实现 Cminus Compiler 编译原理课程作业-Cminus语言的词法及语法分析器实现 词法分析 使用确定有限态自动机(DFA)实现与Lex自动分析两种方式实现。 语法分析 使用递归下降方式与Yacc自动分析两种方式实现。 程

  7. linux ssh配置文件_如何在Windows终端中设置选项卡配置文件以自

    linux ssh配置文件_如何在Windows终端中设置选项卡配置文件以自动SSH进入Linux盒 linux ssh配置文件 By now I hope you've installed Windows Terminal. If not, go do that, I'll wait. It's time. 现在,我希望您已经安装了Windows Terminal 。 如果没有,

  8. (贪心)情感分析作业

    (贪心)情感分析作业 代码写的很糟,仅供参考哈! 本项目的目标是基于用户提供的评论,通过算法自动去判断其评论是正面的还是负面的情感。比如给定一个用户的评论: 评论1: “我特别喜欢这个电器,我已经用了3个月,一点问题都没有