log4j2.xml输出多文件配置的案例

log4j2.xml输出多文件配置的案例

 

方式一:多文件输出案例(配合java获取)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
   <Properties>
      <!-- 请修改日志存储路径 -->
      <Property name="logDir">/app/logs/api</Property>
      <!--<Property name="logDir">D:\/application/logs</Property> -->
      <property name="openapiLogFile">openapi</property>
      <property name="abilityRequestLogFile">abilityRequestLog</property>
      <property name="abilityResponseLogFile">abilityResponseLog</property>
      <property name="esbRequestLogFile">esbRequestLog</property>
      <property name="esbResponseLogFile">esbResponseLog</property>
      <property name="errLogFile">errLog</property>
      <property name="apiGuarantLogFile">apiGuarantLog</property>
      <Property name="pattern-format">%-5.5p:%d [ %c:%L ] - %m%n</Property>
      <Property name="level">debug</Property>
      <Property name="charset">utf-8</Property>
   </Properties>

   <!-- 通过Appenders定义Spring框架和业务模块的日志输出到不同的文件。 在Loggers中指定不同包的日志输出到不同文件,Root指定日志输出到标准输出。 -->

   <appenders>
      <!-- 定义控制台输出 -->
      <Console name="Console" target="SYSTEM_OUT" follow="true">
         <!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
         <ThresholdFilter level="debug" onMatch="ACCEPT"
            onMismatch="DENY" />
         <PatternLayout charset="${charset}" pattern="${pattern-format}" />
      </Console>

      <RollingRandomAccessFile name="openapiLogFile"
         fileName="${logDir}/${openapiLogFile}.log" append="true"
         filePattern="${logDir}/${openapiLogFile}-%d{yyyy-MM-dd}-%i.log.gz">
         <PatternLayout charset="${charset}" pattern="${pattern-format}" />
         <Policies>
            <!-- 表示隔1天进行压缩 -->
            <TimeBasedTriggeringPolicy modulate="true"
               interval="1" />
            <!-- 表示单个文件最大多少容量进行压缩 -->
            <SizeBasedTriggeringPolicy size="204800 KB" />
         </Policies>
         <!-- 表示压缩包,最多保留30个 -->
         <DefaultRolloverStrategy max="100" />
         <Filters>
            <ThresholdFilter level="${level}" onMatch="ACCEPT"
               onMismatch="DENY" />
         </Filters>
      </RollingRandomAccessFile>

      <RollingRandomAccessFile name="abilityRequesFile"
         fileName="${logDir}/${abilityRequestLogFile}.log" append="true"
         filePattern="${logDir}/${abilityRequestLogFile}-%d{yyyy-MM-dd}-%i.log.gz">
         <PatternLayout charset="${charset}" pattern="${pattern-format}" />
         <Policies>
            <!-- 表示隔1天进行压缩 -->
            <TimeBasedTriggeringPolicy modulate="true"
               interval="1" />
            <!-- 表示单个文件最大多少容量进行压缩 -->
            <SizeBasedTriggeringPolicy size="204800 KB" />
         </Policies>
         <!-- 表示压缩包,最多保留30个 -->
         <DefaultRolloverStrategy max="100" />
         <Filters>
            <ThresholdFilter level="${level}" onMatch="ACCEPT"
               onMismatch="DENY" />
         </Filters>
      </RollingRandomAccessFile>

      <RollingRandomAccessFile name="abilityResponseFile"
         fileName="${logDir}/${abilityResponseLogFile}.log" append="true"
         filePattern="${logDir}/${abilityResponseLogFile}-%d{yyyy-MM-dd}-%i.log.gz">
         <PatternLayout charset="${charset}" pattern="${pattern-format}" />
         <Policies>
            <!-- 表示隔1天进行压缩 -->
            <TimeBasedTriggeringPolicy modulate="true"
               interval="1" />
            <!-- 表示单个文件最大多少容量进行压缩 -->
            <SizeBasedTriggeringPolicy size="204800 KB" />
         </Policies>
         <!-- 表示压缩包,最多保留30个 -->
         <DefaultRolloverStrategy max="100" />
         <Filters>
            <ThresholdFilter level="${level}" onMatch="ACCEPT"
               onMismatch="DENY" />
         </Filters>
      </RollingRandomAccessFile>

      <RollingRandomAccessFile name="esbRequestFile"
         fileName="${logDir}/${esbRequestLogFile}.log" append="true"
         filePattern="${logDir}/${esbRequestLogFile}-%d{yyyy-MM-dd}-%i.log.gz">
         <PatternLayout charset="${charset}" pattern="${pattern-format}" />
         <Policies>
            <!-- 表示隔1天进行压缩 -->
            <TimeBasedTriggeringPolicy modulate="true"
               interval="1" />
            <!-- 表示单个文件最大多少容量进行压缩 -->
            <SizeBasedTriggeringPolicy size="204800 KB" />
         </Policies>
         <!-- 表示压缩包,最多保留30个 -->
         <DefaultRolloverStrategy max="100" />
         <Filters>
            <ThresholdFilter level="${level}" onMatch="ACCEPT"
               onMismatch="DENY" />
         </Filters>
      </RollingRandomAccessFile>

      <RollingRandomAccessFile name="esbResponseFile"
         fileName="${logDir}/${esbResponseLogFile}.log" append="true"
         filePattern="${logDir}/${esbResponseLogFile}-%d{yyyy-MM-dd}-%i.log.gz">
         <PatternLayout charset="${charset}" pattern="${pattern-format}" />
         <Policies>
            <!-- 表示隔1天进行压缩 -->
            <TimeBasedTriggeringPolicy modulate="true"
               interval="1" />
            <!-- 表示单个文件最大多少容量进行压缩 -->
            <SizeBasedTriggeringPolicy size="204800 KB" />
         </Policies>
         <!-- 表示压缩包,最多保留30个 -->
         <DefaultRolloverStrategy max="100" />
         <Filters>
            <ThresholdFilter level="${level}" onMatch="ACCEPT"
               onMismatch="DENY" />
         </Filters>
      </RollingRandomAccessFile>

      <RollingRandomAccessFile name="errFile"
         fileName="${logDir}/${errLogFile}.log" append="true"
         filePattern="${logDir}/${errLogFile}-%d{yyyy-MM-dd}-%i.log.gz">
         <PatternLayout charset="${charset}" pattern="${pattern-format}" />
         <Policies>
            <!-- 表示隔1天进行压缩 -->
            <TimeBasedTriggeringPolicy modulate="true"
               interval="1" />
            <!-- 表示单个文件最大多少容量进行压缩 -->
            <SizeBasedTriggeringPolicy size="204800 KB" />
         </Policies>
         <!-- 表示压缩包,最多保留30个 -->
         <DefaultRolloverStrategy max="100" />
         <Filters>
            <ThresholdFilter level="${level}" onMatch="ACCEPT"
               onMismatch="DENY" />
         </Filters>
      </RollingRandomAccessFile>

      <RollingRandomAccessFile name="apiGuarantFile"
         fileName="${logDir}/${apiGuarantLogFile}.log" append="true"
         filePattern="${logDir}/${apiGuarantLogFile}-%d{yyyy-MM-dd}-%i.log.gz">
         <PatternLayout charset="${charset}" pattern="${pattern-format}" />
         <Policies>
            <!-- 表示隔1天进行压缩 -->
            <TimeBasedTriggeringPolicy modulate="true"
               interval="1" />
            <!-- 表示单个文件最大多少容量进行压缩 -->
            <SizeBasedTriggeringPolicy size="204800 KB" />
         </Policies>
         <!-- 表示压缩包,最多保留30个 -->
         <DefaultRolloverStrategy max="100" />
         <Filters>
            <ThresholdFilter level="${level}" onMatch="ACCEPT"
               onMismatch="DENY" />
         </Filters>
      </RollingRandomAccessFile>
   </appenders>

   <loggers>
      <AsyncRoot level="${level}">
         <Appender-ref ref="Console" />
         <Appender-ref ref="openapiLogFile" />
      </AsyncRoot>

      <!-- 异步:调用openApiLog日志 -->
      <AsyncLogger name="openApiLog" level="ALL" additivity="TRUE">
         <AppenderRef ref="openapiLogFile" />
      </AsyncLogger>

      <!-- 异步:调用openApiLog日志 -->
      <AsyncLogger name="abilityRequestLog" level="ALL"
         additivity="TRUE">
         <AppenderRef ref="abilityRequesFile" />
      </AsyncLogger>

      <!-- 异步:调用openApiLog日志 -->
      <AsyncLogger name="abilityResponseLog" level="ALL"
         additivity="TRUE">
         <AppenderRef ref="abilityResponseFile" />
      </AsyncLogger>

      <!-- 异步:调用openApiLog日志 -->
      <AsyncLogger name="esbRequestLog" level="ALL" additivity="TRUE">
         <AppenderRef ref="esbRequestFile" />
      </AsyncLogger>

      <!-- 异步:调用openApiLog日志 -->
      <AsyncLogger name="esbResponseLog" level="ALL" additivity="TRUE">
         <AppenderRef ref="esbResponseFile" />
      </AsyncLogger>

      <!-- 异步:调用openApiLog日志 -->
      <AsyncLogger name="errLog" level="ALL" additivity="TRUE">
         <AppenderRef ref="errFile" />
      </AsyncLogger>

      <!-- 异步:调用apiGuarantLog日志 -->
      <AsyncLogger name="apiGuarantLog" level="ALL" additivity="TRUE">
         <AppenderRef ref="apiGuarantFile" />
      </AsyncLogger>

      <logger name="com.sitech.miso.dao" level="${level}" additivity="TRUE">
         <appender-ref ref="Console" />
      </logger>

      <logger name="org.springframework" level="error" />
      <logger name="httpclient" level="error" />
      <logger name="org.apache" level="error" />
      <logger name="com.netflix" level="error" />
      <logger name="com.mchange" level="error" />

      <!-- Root指定日志输出到标准控制台输出。 -->
      <!-- 注意Logger配置的additivity=“true”,表示日志信息除了在当前logger输出外还会在Root的Logger输出。这样就实现了同时在文件和控制台输出的目的 -->
      <Root level="${level}">
         <appender-ref ref="Console" />
      </Root>

   </loggers>


</configuration>  
import org.apache.logging.log4j.Logger;
private static Logger abilityRequestLog = LogManager.getLogger("abilityRequestLog");
private static Logger abilityResponseLog = LogManager.getLogger("abilityResponseLog");
private static Logger esbRequestLog = LogManager.getLogger("esbRequestLog");
private static Logger esbResponseLog = LogManager.getLogger("esbResponseLog");
private static Logger errLog = LogManager.getLogger("errLog");
private static Logger apiGuarantLog = LogManager.getLogger("apiGuarantLog");

通过Logger 获取指定名称的日志并将其输出到对应的文件中

 

方式二:按月打包日志输出

<?xml version="1.0" encoding="UTF-8"?>
<!--status用于设置log4j2自身内部的信息输出;monitorInterval:定时重新加载配置-->
<Configuration status="WARN" monitorInterval="1800">
   <Properties>
        <Property name="log-path">${log.path}</Property>
        <!-- 注意:使用%l参数性能会下降1.3 - 5 times(官方数据),并发量不大的情况可以使用 -->
        <Property name="pattern-format">%d{yyyy-MM-dd HH:mm:ss.SSS}-[%p][%t] %l %m%n</Property>
        <Property name="charset">UTF-8</Property>
        <Property name="level">debug</Property>
        <Property name="ConsoleLevel">debug</Property>
        <!-- 是否输出行号 -->
        <Property name="includeLocation">true</Property>
    </Properties>
   <Appenders>
      <!--输出控制台的配置-->
      <Console name="Console" target="SYSTEM_OUT">
         <!--控制台输出level及以上级别的信息(onMatch),其他的xxx -->
            <ThresholdFilter level="${ConsoleLevel}" onMatch="ACCEPT" onMismatch="DENY" />
            <!--输出日志的格式-->
         <PatternLayout charset="${charset}" pattern="${pattern-format}" />
      </Console>
       <!-- 默认输出日志文件,归档存储的目录是基于当前年和月 -->
      <RollingFile name="bpmLogger" fileName="${log-path}/bpm-rest.log"
         filePattern="${log-path}/$${date:yyyy-MM}/bpm-rest-%d{yyyy-MM-dd}-%i.log.gz">

         <!-- 这里设置ThresholdFilter的目的是输出SQL,需要指定onMismatch是ACCEPT,否则如果SQL对应的logger级别低于该级别时不输出SQL -->
         <ThresholdFilter level="${level}" onMatch="ACCEPT"
            onMismatch="ACCEPT" />
         <PatternLayout charset="${charset}" pattern="${pattern-format}" />
         <Policies>
            <!-- 按大小分文件 -->
            <SizeBasedTriggeringPolicy size="200 MB"/>
            <!-- 以filePattern后的日期格式精确到哪一位,interval也精确到哪一位,这里指按天文件 -->
            <TimeBasedTriggeringPolicy interval="1"
               modulate="true" />
         </Policies>
         <!-- 在rollover时间内匹配删除基本目录下所有满足参数glob等于*/app-*.log.gz和超过半年或更早的文件 -->
         <DefaultRolloverStrategy>
            <Delete basePath="${log-path}" maxDepth="2">
               <IfFileName glob="*/bpm-rest-*.log.gz" />
               <IfLastModified age="180d" />
            </Delete>
         </DefaultRolloverStrategy>
      </RollingFile>

      <!-- 异常告警日志文件,归档存储的目录是基于当前年和月 -->
      <RollingFile name="errorLog"
         fileName="${log-path}/error/bpm-rest-error.log"
         filePattern="${log-path}/error/$${date:yyyy-MM}/bpm-rest-error-%d{yyyy-MM-dd}-%i.log.gz">

         <ThresholdFilter level="warn" onMatch="ACCEPT"
            onMismatch="DENY" />
         <PatternLayout charset="${charset}"
            pattern="%m%n" />
         <Policies>
            <!-- 按大小分文件 -->
            <SizeBasedTriggeringPolicy size="200 MB"/>
            <!-- 以filePattern后的日期格式精确到哪一位,interval也精确到哪一位,这里指按天文件 -->
            <TimeBasedTriggeringPolicy interval="1"
               modulate="true" />
         </Policies>
         <!-- 在rollover时间内匹配删除基本目录下所有满足参数glob等于*/app-*.log.gz和超过半年或更早的文件 -->
         <DefaultRolloverStrategy>
            <Delete basePath="${log-path}/error" maxDepth="2">
               <IfFileName glob="*/bpm-rest-error-*.log.gz" />
               <IfLastModified age="180d" />
            </Delete>
         </DefaultRolloverStrategy>
      </RollingFile>

   </Appenders>
   <Loggers>
      <AsyncRoot includeLocation="${includeLocation}" level="${level}">
               <AppenderRef ref="Console" />
               <AppenderRef ref="bpmLogger" />
        </AsyncRoot>

      <!-- warn级别及以上 输出至异常告警日志 -->
      <AsyncLogger name="errorLog" level="warn">
         <AppenderRef ref="errorLog" />
      </AsyncLogger>
   </Loggers>
</Configuration>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值