log4j2配置ThresholdFilter,让info文件记录error日志

日志级别:

是按严重(重要)程度来分的(如下6种):

ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF

打印日志的规则:

levelP>=levelQ,则levelP会打印在levelQ的log里。

即:如果设置的日志级别是info,则会包括info、warn、error等高级别的日志


如下demo以打印到控制台来做测试。

log4j2依赖

    <properties>
        <log4j.version>2.5</log4j.version>
    </properties>

    <dependencies>
        <!--引入log4j2必要的依赖(log4j-api、log4j-core)-->
        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j.version}</version>
        </dependency>

    </dependencies>

log4j2.xml

springcontext文件不需要引入log4j文件。log4j框架会自动检测该文件。

下面log4j2配置Root的level是info。所以,默认在不设置Filter时,会打印INFO WARN ERROR FATAL级别的日志。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <!-- 控制台打印 -->
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <PatternLayout pattern="%d %-5p [%t] (%F:%L) - %m%n"/>
            <Filters>
                ~~~
            </Filters>
        </Console>

        <!-- 按天每天备份一个日志 -->
        <RollingFile name="ManageWebInfo" fileName="d:\logs\log4j2study_info.log"
                     filePattern="d:\logs\log4j2study_info_%d{yyyy-MM-dd}_%i.log.gz">
            。。。
        </RollingFile>

        <RollingFile name="ManageWebError" fileName="d:\logs\log4j2study_error.log"
                     filePattern="d:\logs\log4j2study_error_%d{yyyy-MM-dd}_%i.log.gz">
            。。。
        </RollingFile>
    </Appenders>

    <Loggers>
        <Root level="info">
            <AppenderRef ref="CONSOLE"/>
            <AppenderRef ref="ManageWebInfo"/>
            <AppenderRef ref="ManageWebError"/>
        </Root>
        <Logger name="study" level="WARN">
            <AppenderRef ref="CONSOLE"/>
        </Logger>
    </Loggers>
</Configuration>

test class

package study;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Log4j2Test {
    public static void main(String[] args) throws Exception {
//        Logger logger= LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
        Logger logger = LogManager.getLogger(/*"study"*/);
        logger.trace("trace level");
        logger.debug("debug level");
        logger.info("info level");
        logger.warn("warn level");
        logger.error("error level");
        logger.fatal("fatal level");

//        Thread.sleep(10);
        throw new Exception("test");
    }
}

测试

以控制台输出为例来进行测试,在上面“CONSOLE”的<Filters>节点定义不同的ThresholdFilter来测试输出。

<ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
2018-12-28 16:07:44,477 INFO [main] (MyLogTest.java:11) - info level
2018-12-28 16:07:44,479 WARN [main] (MyLogTest.java:12) - warn level

<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
2018-12-28 16:09:43,849 INFO [main] (MyLogTest.java:11) - info level

<ThresholdFilter level="INFO" onMatch="DENY" onMismatch="NEUTRAL"/>
高于INFO的都不打印,因为root日志级别是info,所以就不会打印任何日志了。

<ThresholdFilter level="FATAL" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
只打印INFO和ERROR

<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
只打印ERROR及以上(即ERROR和FATAL)(error.log文件的标配)

<ThresholdFilter level="FATAL" onMatch="DENY" onMismatch="ACCEPT"/>
<ThresholdFilter level="FATAL" onMatch="DENY" onMismatch="NEUTRAL"/>(Filters节点里只有这一个Filter时)
打印INFO、WARN、ERROR(常见的info.log文件的标配)

总结
a)ThresholdFilter属性:onMatch表示匹配设定的日志级别后是DENY还是ACCEPT,onMismatch表示不匹配设定的日志级别是DENY还是ACCEPT还是NEUTRAL
b)上面说的match/misMatch指的是高于或等于设定的日志级别。所以,要先定义日志级别高的Filter。

————————————————————————————

main方法在打印日志的语句后面throw了一个异常。 运行main方法看控制台的输出,会出现异常信息先于log日志输出的情况,可见log4j2是异步记日志的。
————————————————————————————
需要注意的是,未捕获的异常是不会记日志文件的。————好像是废话~~—————所以,程序一定要捕获异常并且打印出来,否则只能看catelina了
————————————————————————————
Loggers节点里的Root定义了基本的日志级别与appender的配置关系。如果要自定义关系,可配置Logger节点,设定name属性名(取值通常是class/interface的name),然后在定义Logger对象的实例时,指定这个name即可。

原文地址:https://www.cnblogs.com/buguge/p/10256769.html

时间: 2024-12-19 13:05:30

log4j2配置ThresholdFilter,让info文件记录error日志的相关文章

11.22-11.24访问日志不记录静态文件,访问日志切割,静态元素过期时间

11.22 访问日志不记录静态文件 11.23 访问日志切割 11.24 静态元素过期时间 扩展 apache日志记录代理IP以及真实客户端IP  http://ask.apelearn.com/question/960apache只记录指定URI的日志  http://ask.apelearn.com/question/981apache日志记录客户端请求的域名  http://ask.apelearn.com/question/1037apache 日志切割问题  http://ask.ap

spring boot log4j2配置

[传送门]:log4j官网配置文件详解 1. 排除 spring boot 自带的  spring-boot-starter-logging 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <!-- remove log4j --> &l

Log4Net在MVC下的配置以及运用线程队列记录异常信息

Log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件.数据库.EventLog等),日志就是程序的黑匣子,可以通过日志查看系统的运行过程,从而发现系统的问题.日志的作用:将运行过程的步骤.成功失败记录下来,将关键性的数据记录下来分析系统问题所在.Log4J.对于网站来讲,不能把异常信息显示给用户,异常信息只能记录到日志,出了问题把日志文件发给开发人员,就能知道问题所在. 配置Log4Net环境 (1)新建一个WebApplication (2)添加对log4net.dl

记处理线上记录垃圾日志 The view &#39;Error&#39; or its master was not found

最近监控线上日志,网站是ASP.NET MVC 开发的,发现不少错误日志都记录同样的内容: The view 'Error' or its master was not found or no view engine supports the searched locations. The following locations were searched: ~/Views/Search/Error.aspx ~/Views/Search/Error.ascx ~/Views/Shared/Er

文件记录锁的释放

引言:apue中提到文件记录锁的释放中的两条规则:当进程终止的时候,进程在文件上建立的记录锁会全部释放:当关闭文件,执行close(fd)函数的时候,进程释放描述符可以引用的文件上的任何一把锁.对于第一条规则的理解应该没有分歧.但对于第二条规则的理解,则会出现疑惑,执行close(fd)的时候,是仅仅释放closf(fd)调用进程在文件上的记录锁,还是会释放所有进程(包括非调用进程)在文件上的记录锁.本文通过具体相关程序对此问题进行验证. 思路:需要设计验证程序对此问题进行验证,通过fork产生

SVN如何查看修改的文件记录] 来源:Linux社区 作者:frogoscar

SVN如何查看修改的文件记录 [日期:2014-11-20] 来源:Linux社区  作者:frogoscar [字体:大 中 小] 主要是有四个命令,svn log用来展示svn 的版本作者.日期.路径等等:svn diff,用来显示特定修改的行级详细信息:svn cat,取得在特定版本的某文件显示在当前屏幕:svn  list,显示一个目录或某一版本存在的文件. 比较常用的是svn diff命令.它可以比较不同版本之间.svn版本和本地版本库之间,以及检查本地修改的作用. svn diff;

LAMP--Apache 不记录指定文件类型的日志

如果一个站点的访问量特别大,那么访问日志就会很多,但有一些访问日志我们其实是可以忽略的,比如网站的一些图片,还有 js,css 等静态对象.而这些文件的访问往往是巨量的,记录这些日志也没什么用,那就可以忽略掉这些访问的日志了. 相关配置是在虚拟主机配置文件中加入以下语句: [[email protected] ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf     SetEnvIf Request_URI ".*\.gif$&quo

对备份恢复有重要意义的控制文件记录项

整理自:临危不惧oracle11g数据库恢复技术 dbid dbid保存在控制文件中,在数据文件和日志文件的头部也存在,其作用是判断控制文件.数据文件.日志文件是否属于同一个数据库. 数据库名 此信息与dbid一致. 控制文件序列号 该序列号是判断控制文件是否过旧的要素之一,在控制文件被更新后就会增长.控制文件增长包括检查点信息更新.创建或删除表空间等. 控制文件序列号在数据文件和日志文件的头部也有,但与控制文件中的不同,它们在自身的头部被更新时从当时的控制文件中复制的. 在库运行时,当数据文件

配置Windows server 2008文件同步[转]

众所周知,Linux系统可以用rsync来实现文件或目录的同步,windows系统下也一样可以.我们现在就用cwRsync来实现windows server 2008系统下的文件同步. 一.系统环境 操作系统:Windows server 2008 R2 更新源服务器:192.168.0.108 目的服务器:192.168.0.132 服务端:cwRsyncServer_4.1.0_Installer 客户端:cwRsync_4.1.0_Installer 二.更新源服务器安装配置(cwRsyn