在日常的项目开发中,我们可能会使用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文件的更多相关文章

  1. C#将XML转换成JSON转换XML

    原文:C#将XML转换成JSON转换XML using System; using System.Collections.Generic; using System.Linq; using Syste ...

  2. WPS 2019 多个sheet表拆分成独立的excel文件

    参考: https://www.cnblogs.com/hackxiyu/p/8945975.html 场景:将多个sheet表拆分成独立的excel文件 一.安装VB工具: 默认情况下:wps -- ...

  3. log4j2的配置文件log4j2.xml笔记

    一.背景 最近由于项目的需要,我们把log4j 1.x的版本全部迁移成log4j 2.x 的版本,那随之而来的slf4j整合log4j的配置(使用Slf4j集成Log4j2构建项目日志系统的完美解决方 ...

  4. excel多个sheet表拆分成独立的excel文件

    一.问题: 公司做一个项目,给的用户上报文是一个包含多个sheet页的excel文件, 但是在实际处理报文数据的时候需要拆分excel文件为多个独立的报文excel文件 二.解决: (1)一个一个的复 ...

  5. 把xml转成javabean的工具类

    import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import javax.x ...

  6. xml转换成map

    import java.io.IOException;import java.io.StringReader;import java.util.ArrayList;import java.util.H ...

  7. 聊一聊log4j2配置文件log4j2.xml

    一.背景 最近由于项目的需要,我们把log4j 1.x的版本全部迁移成log4j 2.x 的版本,那随之而来的slf4j整合log4j的配置(使用Slf4j集成Log4j2构建项目日志系统的完美解决方 ...

  8. log4j2配置文件log4j2.xml

    原地址:https://www.cnblogs.com/hafiz/p/6170702.html 1.关于配置文件的名称以及在项目中的存放位置 log4j 2.x版本不再支持像1.x中的.proper ...

  9. log4j2配置文件log4j2.xml详解(转载)

    此博文转载自阿豪聊干货:https://www.cnblogs.com/hafiz/p/6170702.html 一.背景 最近由于项目的需要,我们把log4j 1.x的版本全部迁移成log4j 2. ...

随机推荐

  1. laravel5.5队列

    目录 简单实例 1. 简介和配置 1.1 好处 1.2 配置文件 1.3 队列驱动的必要配置 2. 创建任务 2.1 生成任务类 2.2 修改任务类 2.3 分发任务 2.4 自定义队列 & ...

  2. Kafka实践、升级和新版本(0.10)特性预研

    本文来自于网易云社区 一.消息总线MQ和Kafka (挡在请求的第一线) 1. 几个应用场景 case a:上游系统往下游系统推送消息,而不关心处理结果: case b:一份新数据生成,需要实时保存到 ...

  3. PBFT性能会下降? 各种算法的对比。

    PBFT协议在超过100个节点的时候性能会下降 作者:maxdeath 链接:https://www.zhihu.com/question/60058591/answer/173970031 首先要搞 ...

  4. Linux 内核数据结构bitmap

    #include <stdio.h> #include <stdlib.h> #define MAX_PRIO 10000 #define BITS_PER_LONG 32 # ...

  5. UVALive 4764 简单dp水题(也可以暴力求解)

    B - Bing it Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status ...

  6. 用PHP写一个双向队列

    PHP写一个双向队列,其实是在考察PHP几个内置数组的函数 用PHP写一个双向队列 <?php class Deque{ public $queue = array(); /** * 尾部入对 ...

  7. nginx的入门到框架设计

    mac上安装nginx 安装与启动 安装 brew install nginx 命令 通过 Homebrew 下载的软件默认位置在 /usr/local/Cellar 应该ln-s 加连接就能全局 n ...

  8. KVC 开发详情

    目录 概述 KVC基本技术 KVC访问函数 KVC搜索顺序 KVC集合操作 一.概述 kvc全名是Key-value coding,kvc是一种通过字符串间接的访问oc对象的属性的一种技术. 一个oc ...

  9. InfluxDB安装后web页面无法访问的解决方案

    本文属于<InfluxDB系列教程>文章系列,该系列共包括以下 16 部分: InfluxDB学习之InfluxDB的安装和简介 InfluxDB学习之InfluxDB的基本概念 Infl ...

  10. synflood 模拟工具

    synflood 模拟工具 来源 https://blog.csdn.net/wuzhimang/article/details/54581117 因项目需要,要对主流的几家抗DDoS设备做测评,当然 ...