log4j2按日志級別輸出到指定文件


在項目中,可能會產生非常多的日志記錄,為了方便日志分析,一般可以將日志按級別輸出到指定文件,本次就先說說log4j2的實現吧:

1、先加入log4j2依賴包

2、寫一個java類進行測試,類文件中僅僅寫幾行日志:

 1 package com.jessezeng.log4j2.test;
 2 
 3 import org.apache.logging.log4j.LogManager;
 4 import org.apache.logging.log4j.Logger;
 5 
 6 public class Test {
 7     
 8     private static  Logger log=LogManager.getLogger(Test.class);
 9     public static void main(String[] args) {
10           log.info("info test...................");
11           log.error("error test...................");
12     }
13 }

3、配置log4j2xml:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!-- status="OFF",可以去掉,它的含義為是否記錄log4j2本身的event信息,默認是OFF -->
 3 <configuration status="OFF">
 4     <!-- 定義下面的引用名 -->
 5     <Properties>
 6         <property name="log_pattern"> %d %-5p [%c] %m%n</property> 
 7         <property name="basePath">/logs</property>
 8 
 9         <property name="common-msg">${basePath}/common.log</property>
10         <property name="rollingfile_common-msg">${basePath}/common%d{yyyy-MM-dd}.log</property>
11 
12         <property name="error-msg">${basePath}/error.log</property>
13         <property name="rollingfile_error-msg">${basePath}/error%d{yyyy-MM-dd}.log</property>
14 
15     </Properties>
16     <!--先定義所有的appender -->
17     <appenders>
18         <!--輸出控制台的配置 -->
19         <Console name="Console" target="SYSTEM_OUT">
20             <!--控制台只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch) -->
21             <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
22             <!--輸出日志的格式 -->
23             <PatternLayout pattern="${log_pattern}" />
24         </Console>
25 
26         <!--打印出所有的信息,每次大小超過size,則這size大小的日志會自動存入按年份-月份建立的文件夾下面並進行壓縮,作為存檔 -->
27         <!-- 按月生成歸檔日志,可以使用 filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log" -->
28         <RollingFile name="rollingfile_common-msg"
29             filename="${common-msg}" filePattern="${rollingfile_common-msg}"
30             append="true">
31             <Filters>
32                 <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
33                 <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
34              </Filters>
35             <Policies>
36                 <TimeBasedTriggeringPolicy />
37             </Policies>
38         </RollingFile>
39 
40         <RollingFile name="rollingfile_error-msg"
41             filename="${error-msg}" filePattern="${rollingfile_error-msg}"
42             append="true">
43              <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
44             <PatternLayout>
45                 <Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %class{36} %L %M - %msg%xEx%n</Pattern>
46             </PatternLayout>
47             <Policies>
48                 <TimeBasedTriggeringPolicy />
49             </Policies>
50         </RollingFile>
51     </appenders>
52     <!--然后定義logger,只有定義了logger並引入的appender,appender才會生效 -->
53     <loggers>
54         <AsyncLogger name="net.shgaoxin.log4j2test" level="info" additivity="false"  includeLocation="true">
55             <AppenderRef ref="rollingfile_common-msg"  />
56             <AppenderRef ref="rollingfile_error-msg" />
57         </AsyncLogger>
58     </loggers>
59 </configuration>

需要注意的是ThresholdFilter的onMatch/onMismatch的三個選項值:ACCEPT/DENY/NEUTRAL,如果有多個ThresholdFilter,那么Filters是必須的,在Filters中,首先要過濾不符合的日志級別,把不需要的首先DENY掉,然后再ACCEPT需要的日志級別,同時也需要注意次序。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM