log4j2配置ThresholdFilter,让info文件记录error日志
<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>
<?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日志的更多相关文章
- apache安全配置---禁止访问特定文件,防止日志、压缩包被下载
指定禁止访问 某些后缀的文件 修改apache配置httpd.conf,在最后加上配置后,重启apache <Files ~ ".txt|.log|.zip|.gz|.sql" ...
- Log4j 记录error 日志
第一个bug的起始,是在线上日志发现一个频繁打印的异常——java.lang.ArrayIndexOutOfBoundsException.但是却没有堆栈,只有一行一行的ArrayIndexOutOf ...
- 使用XML文件记录操作日志,并从后往前读取操作日志并在richTextBox1控件中显示出来
#region 获取本地程序操作记录日志 /// <summary> /// 获取本地程序更新日志信息(由后往前读取) /// </summary> private void ...
- log4net记录系统错误日志到文本文件用法详解(最新)
此配置文件可以直接拿来用,配置文件上面有详细用法说明,里面也有详细注释说明.此配置文件涵盖按照日期记录和按照文件大小(建议)的实例. 又包括:按照Fatal.Info.Error.Debug.Warn ...
- 转:spring boot log4j2配置(使用log4j2.yml文件)---YAML 语言教程
转:spring boot log4j2配置(使用log4j2.yml文件) - CSDN博客http://blog.csdn.net/ClementAD/article/details/514988 ...
- springboot2.7.x 集成log4j2配置写入日志到mysql自定义表格
在阅读之前请先查看[springboot集成log4j2] 本文暂不考虑抽象等实现方式,只限于展示如何自定义配置log4j2并写入mysql数据库(自定义结构) 先看下log4j2的配置 <?x ...
- Log4j2 - 配置
官方文档:http://logging.apache.org/log4j/2.x/index.html 1 概述 Log4j2的配置包含四种方式,其中3种都是在程序中直接调用Log4j2的方法进行配置 ...
- Log4j2配置及使用
Log4j2:一个日志管理工具.Log4j的升级版,需要Java6以上 一.安装log4j2依赖包 1.通过maven的pom.xml直接引入jar: log4j-api和log4j-core & ...
- Log4Net在MVC下的配置以及运用线程队列记录异常信息
Log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件.数据库.EventLog等),日志就是程序的黑匣子,可以通过日志查看系统的运行过程,从而发现系统的问题.日志的作用:将运 ...
随机推荐
- kth min_max容斥
题解: 普通的$min-max$容斥是用来求最后出现元素的期望之类的 $kth min-max$容斥进一步解决倒数第k个出现的元素的期望 给出公式: $kthmax(S)=\sum\limits_{T ...
- mybatis 开发规范
- python---日常练习
##输入a,b,c,d4个整数,计算a+b-c*d的结果 #numa=input('请输入整数:'); #numb=input('请输入整数:'); #numc=input('请输入整数:'); #n ...
- 分享关于搭建高性能WEB服务器的一篇文章
这篇文章主要介绍了Centos5.4+Nginx-0.8.50+UWSGI-0.9.6.2+Django-1.2.3搭建高性能WEB服务器的相关资料,需要的朋友可以参考下(http://m.0813s ...
- 转:mongoDB 修改 ulimit
转自:http://blog.yucanlin.cn/2015/03/23/mongodb-%E4%BF%AE%E6%94%B9-ulimit/ mongoDB 修改 ulimit 一切都源于mong ...
- Selenium获取当前窗口句柄与切换回原窗口句柄
Selenium通过window_handles获取当前窗口句柄,进行页面元素操作 切换回原窗口句柄,进行元素操作 代码如下:(python版) __author__ = 'liuke' import ...
- 认识vim 编辑器
vim编辑器 vim编辑器的重点是光标的移动,模式切换,删除,查找,替换,复制,撤销命令的使用. vim 有三种模式: 命令模式,编辑模式,末行模式 vim打开方式: 语法: vim 文件路径 vim ...
- React_基本原理_ajax
React 基本原理 初始化显示界面 创建虚拟DOM树 渲染到 原生 DOM 树 绘制界面显示 更新界面 setState() 更新状态机 重新创建虚拟 DOM 树 新/旧树比较差异 (执行一次 DO ...
- [LeetCode] K-th Smallest Prime Fraction 第K小的质分数
A sorted list A contains 1, plus some number of primes. Then, for every p < q in the list, we co ...
- Python基础之数据基本运算
一.核心数据类型(五种): 在Python中变量没有数据类型,但关联的对象有数据类型,可通过type函数查看数据类型 1.整型(Int): 包含正整数,负整数和零 二进制:逢二进一,书写格式为 a = ...