動態配置log4j2.xml日志輸出文件的位置


目標:根據啟動jar時傳進main()的參數動態修改日志位置

一、修改啟動項 

MainMapLookup.setMainArguments(args);
注:不要在lookup設置之前初始化log(如:
private static final Logger log = LoggerFactory.getLogger(HttpServer.class);)
 1   public static void main(String[] args) throws InterruptedException, ServletException {
 2         // 設置log文件夾
 3         MainMapLookup.setMainArguments(args);
 4 
 5         // 讀配置文件並啟動
 6         try {
 7             String confPathName = args[0];
 8             // 讀取jar外的配置文件
 9             InputStream in = new BufferedInputStream(new FileInputStream(confPathName+ "/conf.properties"));
10             config.load(in);
11         } catch (Exception e) {
12             e.printStackTrace();
13         }
14         new HttpServer().start();
15     }

二、設置log4j2.xml

  ${main:0}

  

lo4j2.xml 代碼如下

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 
 3 <!--
 4     status : 這個用於設置log4j2自身內部的信息輸出,可以不設置,當設置成trace時,會看到log4j2內部各種詳細輸出
 5     monitorInterval : Log4j能夠自動檢測修改配置文件和重新配置本身, 設置間隔秒數。
 6 -->
 7 <Configuration status="DEBUG" monitorInterval="6000">
 8 
 9     <Properties>
10         <!-- 配置日志文件輸出目錄 -->
11         <Property name="LOG_HOME" value="log/log_${main:0}" />
12         <Property name="LOG_NAME">http</Property>
13     </Properties>
14 
15     <Appenders>
16 
17         <!--這個輸出控制台的配置-->
18         <Console name="Console" target="SYSTEM_OUT">
19             <!-- 控制台只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch) -->
20             <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
21             <!-- 輸出日志的格式 -->
22             <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
23         </Console>
24 
25         <!-- DEBUG日志格式 -->
26         <RollingFile name="service_debug_appender" fileName="${LOG_HOME}/${LOG_NAME}.log"
27                      filePattern="${LOG_HOME}/${LOG_NAME}.log.%d{yyyy-MM-dd}-%i" append="true" immediateFlush="true">
28             <Filters>
29                 <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
30             </Filters>
31             <!--
32                 %d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生產時間
33                 %p : 日志輸出格式
34                 %c : logger的名稱
35                 %m : 日志內容,即 logger.info("message")
36                 %n : 換行符
37                 %C : Java類名
38                 %L : 日志輸出所在行數
39                 %M : 日志輸出所在方法名
40                 hostName : 本地機器名
41                 hostAddress : 本地ip地址
42              -->
43             <PatternLayout>
44                 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M -- %msg%xEx%n</pattern>
45             </PatternLayout>
46             <Policies>
47                 <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
48                 <SizeBasedTriggeringPolicy size="500 MB"/>
49             </Policies>
50         </RollingFile>
51 
52 
53         <!-- ERROR日志格式 -->
54         <RollingFile name="service_error_appender" fileName="${LOG_HOME}/${LOG_NAME}.error"
55                      filePattern="${LOG_HOME}/${LOG_NAME}.error.%d{yyyy-MM-dd}-%i" append="true" immediateFlush="true">
56             <Filters>
57                 <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
58             </Filters>
59             <PatternLayout>
60                 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M -- %msg%xEx%n</pattern>
61             </PatternLayout>
62             <Policies>
63                 <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
64                 <SizeBasedTriggeringPolicy size="500 MB"/>
65             </Policies>
66         </RollingFile>
67     </Appenders>
68 
69     <Loggers>
70         <!-- 配置日志的根節點 -->
71         <Root level="debug">
72             <appender-ref ref="Console"/>
73             <appender-ref ref="service_debug_appender"/>
74             <appender-ref ref="service_error_appender"/>
75         </Root>
76 
77         <!-- 第三方日志系統 -->
78         <logger name="org.springframework" level="INFO"/>
79         <logger name="io.netty" level="warn"/>
80         <logger name="org.apache.http" level="warn"/>
81         <logger name="org.mongodb.driver" level="INFO"/>
82         <logger name="org.jboss.netty" level="warn"/>
83         <logger name="org.springframework.data.redis" level="INFO"/>
84 
85     </Loggers>
86 
87 </Configuration>
View Code

三、結果

  log 文件夾下產生log_${main:0} 文件夾,下面放着系統的日志

 


免責聲明!

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



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