将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. ...
随机推荐
- 19,Ubuntu安装之python开发
什么??公司要用Ubuntu(乌班图)?不会用??怎么进行python开发??? 乌班图操作系统下载地址:http://releases.ubuntu.com/18.04/ubuntu-18.04 ...
- 在ddms 里面查看data/data里面的东西 不显示data/data
今天我要查看data/anr/tarces.txt,没办法,我只有root手机. 可是root之后,我发现还是不能查看或者导出traces.txt. 后来我才知道,root之后,文件夹权限没有变,所以 ...
- JAVA中使用AES加密解密
技术交流群: 233513714 /** * AES加密测试 * * @param str 加密参数 */ public void aesTest(String str) { log.info(&qu ...
- VS Extension+NVelocity系列(三)——让VS支持 NVelocity的智能提示(中)
一.定义 我们知道,我们的插件是服务于NVelocity的,在你的项目当中,对于NVelocity的模板应当有一个统一的文件扩展名,以便于VS在打开指定扩展名的文件后,就能起到具体的作用. 如果我没有 ...
- Visual Studio Emulator for Android 折腾记
想用虚拟机调试Android项目,于是想到了MS免费提供的 Visual Studio Emulator for Android,这玩意价格免费量又足,N久之前试用过,速度杠杠的! 安装包很小,不到4 ...
- 《Cracking the Coding Interview》——第8章:面向对象设计——题目4
2014-04-23 18:17 题目:设计一个停车位的类. 解法:停车位,就要有停车.取车的功能了.另外我还加了一个工作线程用于计费,每秒给那些有车的车位加1块钱费用. 代码: // 8.4 Des ...
- drf解决跨域问题 使用 django-corse-headers扩展
跨域CORS 使用django-corse-headers扩展 安装 pip install django-cors-headers 添加应用 INSTALLED_APPS = ( ... 'cors ...
- NTP学习
NTP(The Network Time Protocol),本以为是一个非常简单的协议,但是看了百度百科和ntp.org的介绍后,我发现我错了. 这个看似简单的协议存在一个很关键也是非常重要的问题- ...
- VC调试篇:减少运行时错误,中断所有异常
问题简述 我在Win7下写的MFC程序,想让它在winXP下运行.一般情况下,如果所有的依赖库都可以在XP下运行的话,那么在XP下运行时没问题的.但是,结果却... 本来程序在win7下运行得好好的, ...
- [转] mysql分区性能初探
本文转自:http://www.cnblogs.com/acpp/archive/2010/08/09/1795464.html 一, 分区概念 分区允许根据指定的规则,跨文件系统分配单个 ...