日志级别:
是按严重(重要)程度来分的(如下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即可。

 
 

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

  1. apache安全配置---禁止访问特定文件,防止日志、压缩包被下载

    指定禁止访问 某些后缀的文件 修改apache配置httpd.conf,在最后加上配置后,重启apache <Files ~ ".txt|.log|.zip|.gz|.sql" ...

  2. Log4j 记录error 日志

    第一个bug的起始,是在线上日志发现一个频繁打印的异常——java.lang.ArrayIndexOutOfBoundsException.但是却没有堆栈,只有一行一行的ArrayIndexOutOf ...

  3. 使用XML文件记录操作日志,并从后往前读取操作日志并在richTextBox1控件中显示出来

    #region 获取本地程序操作记录日志 /// <summary> /// 获取本地程序更新日志信息(由后往前读取) /// </summary> private void ...

  4. log4net记录系统错误日志到文本文件用法详解(最新)

    此配置文件可以直接拿来用,配置文件上面有详细用法说明,里面也有详细注释说明.此配置文件涵盖按照日期记录和按照文件大小(建议)的实例. 又包括:按照Fatal.Info.Error.Debug.Warn ...

  5. 转:spring boot log4j2配置(使用log4j2.yml文件)---YAML 语言教程

    转:spring boot log4j2配置(使用log4j2.yml文件) - CSDN博客http://blog.csdn.net/ClementAD/article/details/514988 ...

  6. springboot2.7.x 集成log4j2配置写入日志到mysql自定义表格

    在阅读之前请先查看[springboot集成log4j2] 本文暂不考虑抽象等实现方式,只限于展示如何自定义配置log4j2并写入mysql数据库(自定义结构) 先看下log4j2的配置 <?x ...

  7. Log4j2 - 配置

    官方文档:http://logging.apache.org/log4j/2.x/index.html 1 概述 Log4j2的配置包含四种方式,其中3种都是在程序中直接调用Log4j2的方法进行配置 ...

  8. Log4j2配置及使用

    Log4j2:一个日志管理工具.Log4j的升级版,需要Java6以上   一.安装log4j2依赖包 1.通过maven的pom.xml直接引入jar: log4j-api和log4j-core & ...

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

    Log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件.数据库.EventLog等),日志就是程序的黑匣子,可以通过日志查看系统的运行过程,从而发现系统的问题.日志的作用:将运 ...

随机推荐

  1. BZOJ4451 [Cerc2015]Frightful Formula 多项式 FFT 递推 组合数学

    原文链接http://www.cnblogs.com/zhouzhendong/p/8820963.html 题目传送门 - BZOJ4451 题意 给你一个$n\times n$矩阵的第一行和第一列 ...

  2. Scala集合常用方法解析

    Java 集合 : 数据的容器,可以在内部容纳数据  List : 有序,可重复的  Set : 无序,不可重复  Map : 无序,存储K-V键值对,key不可重复 scala 集合 : 可变集合( ...

  3. VMware虚拟机下安装ubuntu操作系统

    安装tools:

  4. B. Nirvana Codeforces Round #549 (Div. 2) (递归dfs)

    ---恢复内容开始--- Kurt reaches nirvana when he finds the product of all the digits of some positive integ ...

  5. c#关键字和常用类型表快查

    类型 字节 取值范围 说明 bool 1 true/false/null 布尔类型 char 2 0x0000~0xffff Unicode 16 位字符 byte 1 0~255 无符号的 8 位整 ...

  6. css 绘制三角形

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Java RE (正则表达式)

    正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式通常被用来检索.替换那些符合某个模式(规则) ...

  8. [LeetCode] Subdomain Visit Count 子域名访问量统计

    A website domain like "discuss.leetcode.com" consists of various subdomains. At the top le ...

  9. CSS预编译语言-LESS

    LESS的作用 CSS层叠样式表,它是标记语言,不是编程语言:所有的预编译CSS语言(less/sass…)都是赋予了CSS的面向对象思想 LESS的编译 LESS叫做预编译CSS:写好的LESS代码 ...

  10. python字典转化成json格式。JSONEncoder和JSONDecoder两个类来实现Json字符串和dict类型数据的互相转换

    遇到问题:进行Webservice接口测试时,对接口入参数据进行了处理,变成了dict格式,去进行接口请求报错. 需要转成成json格式,双引号去扩. 如下: 更改代码: # 在Python标准库的j ...