将log4j2的配置文件log4j2.xml拆分成多个xml文件
在日常的项目开发中,我们可能会使用log4j2分离系统日志与业务日志 ,这样一来,log4j2.xml 这个配置文件可能就会变得非常臃肿、庞大,那么我们可以将这个文件拆分成多个配置文件吗? 答案是肯定可以的,现在我们就来拆拆看:
假如最初的配置文件是这样的:
<?xml version="1.0" encoding="UTF-8"?> <configuration status="OFF">
<Properties>
<property name="log_pattern"> %d %-5p [%c] %m%n</property>
<property name="basePath">/logs</property> <property name="common-msg">${basePath}/common.log</property>
<property name="rollingfile_common-msg">${basePath}/common%d{yyyy-MM-dd}.log</property> <property name="error-msg">${basePath}/error.log</property>
<property name="rollingfile_error-msg">${basePath}/error%d{yyyy-MM-dd}.log</property> </Properties>
<!--先定义所有的appender -->
<appenders>
<!--输出控制台的配置 -->
<Console name="Console" target="SYSTEM_OUT">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
<!--输出日志的格式 -->
<PatternLayout pattern="${log_pattern}" />
</Console> <RollingFile name="rollingfile_common-msg"
filename="${common-msg}" filePattern="${rollingfile_common-msg}"
append="true">
<Filters>
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<Policies>
<TimeBasedTriggeringPolicy />
</Policies>
</RollingFile> <RollingFile name="rollingfile_error-msg"
filename="${error-msg}" filePattern="${rollingfile_error-msg}"
append="true">
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %class{36} %L %M - %msg%xEx%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
</Policies>
</RollingFile>
</appenders>
<loggers>
<AsyncLogger name="common.test.log4j2" level="info" additivity="false" includeLocation="true">
<AppenderRef ref="rollingfile_common-msg" />
<AppenderRef ref="rollingfile_error-msg" />
</AsyncLogger>
</loggers>
</configuration>
根据上面配置文件结构,假设我们按照 Properties、appenders、loggers 总共拆成三个配置文件(具体怎么拆分可以根据自己的实际需要进行);
首先看看第一个文件,包含Properties配置(直接定义成一个父配置文件吧,log4j2.xml):
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF" xmlns:xi="http://www.w3.org/2001/XInclude" name="XIncludeDemo">
<!-- 定义下面的引用名 -->
<Properties>
<property name="log_pattern"> %d %-5p [%c] %m%n</property>
<property name="basePath">/logs</property> <property name="common-msg">${basePath}/multTest.log</property>
<property name="rollingfile_common-msg">${basePath}/multTest%d{yyyy-MM-dd}.log</property> <property name="error-msg">${basePath}/multTesterror.log</property>
<property name="rollingfile_error-msg">${basePath}/multTesterror%d{yyyy-MM-dd}.log</property> </Properties>
</configuration>
再来看看包含appenders的配置文件(log4j2_appender.xml):
<appenders>
<!--输出控制台的配置 -->
<Console name="Console" target="SYSTEM_OUT">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
<!--输出日志的格式 -->
<PatternLayout pattern="${log_pattern}" />
</Console> <RollingFile name="rollingfile_common-msg"
filename="${common-msg}" filePattern="${rollingfile_common-msg}"
append="true">
<Filters>
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<Policies>
<TimeBasedTriggeringPolicy />
</Policies>
</RollingFile> <RollingFile name="rollingfile_error-msg"
filename="${error-msg}" filePattern="${rollingfile_error-msg}"
append="true">
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %class{36} %L %M - %msg%xEx%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
</Policies>
</RollingFile>
</appenders>
接下来该包含loggers的配置文件了(log4j2_logger.xml):
<loggers>
<AsyncLogger name="common.test.log4j2" level="info" additivity="false" includeLocation="true">
<AppenderRef ref="rollingfile_common-msg" />
<AppenderRef ref="rollingfile_error-msg" />
</AsyncLogger>
</loggers>
原来的log4j2.xml 已经拆分成三个配置文件了,但是三个文件之间还没有关系,是无法使用的,最后,我们在log4j2.xml中加入关系映射:
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF" xmlns:xi="http://www.w3.org/2001/XInclude" name="XIncludeDemo">
<!-- 定义下面的引用名 -->
<Properties>
<property name="log_pattern"> %d %-5p [%c] %m%n</property>
<property name="basePath">/logs</property> <property name="common-msg">${basePath}/multTest.log</property>
<property name="rollingfile_common-msg">${basePath}/multTest%d{yyyy-MM-dd}.log</property> <property name="error-msg">${basePath}/multTesterror.log</property>
<property name="rollingfile_error-msg">${basePath}/multTesterror%d{yyyy-MM-dd}.log</property> </Properties>
<xi:include href="log4j2_appender.xml" /> <!--配置关系 -->
<xi:include href="log4j2_logger.xml" />
</configuration>
到此为止,log4j2.xml拆分已经完成了。
将log4j2的配置文件log4j2.xml拆分成多个xml文件的更多相关文章
- C#将XML转换成JSON转换XML
原文:C#将XML转换成JSON转换XML using System; using System.Collections.Generic; using System.Linq; using Syste ...
- WPS 2019 多个sheet表拆分成独立的excel文件
参考: https://www.cnblogs.com/hackxiyu/p/8945975.html 场景:将多个sheet表拆分成独立的excel文件 一.安装VB工具: 默认情况下:wps -- ...
- log4j2的配置文件log4j2.xml笔记
一.背景 最近由于项目的需要,我们把log4j 1.x的版本全部迁移成log4j 2.x 的版本,那随之而来的slf4j整合log4j的配置(使用Slf4j集成Log4j2构建项目日志系统的完美解决方 ...
- excel多个sheet表拆分成独立的excel文件
一.问题: 公司做一个项目,给的用户上报文是一个包含多个sheet页的excel文件, 但是在实际处理报文数据的时候需要拆分excel文件为多个独立的报文excel文件 二.解决: (1)一个一个的复 ...
- 把xml转成javabean的工具类
import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import javax.x ...
- xml转换成map
import java.io.IOException;import java.io.StringReader;import java.util.ArrayList;import java.util.H ...
- 聊一聊log4j2配置文件log4j2.xml
一.背景 最近由于项目的需要,我们把log4j 1.x的版本全部迁移成log4j 2.x 的版本,那随之而来的slf4j整合log4j的配置(使用Slf4j集成Log4j2构建项目日志系统的完美解决方 ...
- log4j2配置文件log4j2.xml
原地址:https://www.cnblogs.com/hafiz/p/6170702.html 1.关于配置文件的名称以及在项目中的存放位置 log4j 2.x版本不再支持像1.x中的.proper ...
- log4j2配置文件log4j2.xml详解(转载)
此博文转载自阿豪聊干货:https://www.cnblogs.com/hafiz/p/6170702.html 一.背景 最近由于项目的需要,我们把log4j 1.x的版本全部迁移成log4j 2. ...
随机推荐
- Redis数据更新
技术交流群: 233513714
- spring里面的context:component-scan
原文:http://jinnianshilongnian.iteye.com/blog/1762632 component-scan的作用的自动扫描,把扫描到加了注解Java文件都注册成bean &l ...
- 快速登录机器&数据库
本文来自网易云社区. 作者:盛国存 背景 我们日常在使用ApiDoc维护管理api文档,提高了api文档的整体维护性.但在老旧接口中,补充接口注解无疑是一次繁重的体力劳动.仔细查看,大多数接口的格式 ...
- WIN8、WIN7访问Windows Server 2003服务器的数据库速度很慢、远程速度很慢的解决方法
原因是微软在WIN7开始上加入了网络速度限制.在控制台执行以下命令即可解决: netsh interface tcp set global autotuninglevel=disabled
- 剑指Offer - 九度1503 - 二叉搜索树与双向链表
剑指Offer - 九度1503 - 二叉搜索树与双向链表2014-02-05 23:39 题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树 ...
- 【Perceptron Learning Algorithm】林轩田机器学习基石
直接跳过第一讲.从第二讲Perceptron开始,记录这一讲中几个印象深的点: 1. 之前自己的直觉一直对这种图理解的不好,老按照x.y去理解. a) 这种图的每个坐标代表的是features:fea ...
- Python 两种方式实现斐波那契数列
斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946 ...
- corosync.conf
##totem定义集群内各节点间是如何通信的,totem本是一种协议,专用于corosync专用于各节点间的协议,协议是有版本的 totem { ##版本号 version: ##安全认证on|off ...
- UVa 11806 - Cheerleaders (组合计数+容斥原理)
<训练指南>p.108 #include <cstdio> #include <cstring> #include <cstdlib> using na ...
- SystemTap 用法
SystemTap需要内核符号表: http://ddebs.ubuntu.com/pool/main/l/linux/ 基本语法: next对应C中的return,中途返回: 今晚遗留了两个问题: ...