zoukankan      html  css  js  c++  java
  • 将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拆分已经完成了。

     

  • 相关阅读:
    JNI内存使用问题(转载)
    typearray和obtainStyledAttribute的作用
    handler looper代码总结(原创)精品推荐
    Appium和Robotium在文字输入上的区别
    老李分享:robotium3.6与4.0 later 的区别 2
    老李分享:robotium3.6与4.0 later 的区别 1
    老李分享:robotium常用API 2
    老李分享:robotium常用API 1
    老李分享:Android -自动化埋点 3
    老李分享:Android -自动化埋点 2
  • 原文地址:https://www.cnblogs.com/jessezeng/p/5466403.html
Copyright © 2011-2022 走看看