動態指定日誌路徑(logback)

實現日誌上下文監聽,添加路徑變量

 

 1 package com.x.x.x.listener;  2 
 3 import ch.qos.logback.classic.Level;  4 import ch.qos.logback.classic.Logger;  5 import ch.qos.logback.classic.LoggerContext;  6 import ch.qos.logback.classic.spi.LoggerContextListener;  7 import ch.qos.logback.core.Context;  8 import ch.qos.logback.core.spi.ContextAwareBase;  9 import ch.qos.logback.core.spi.LifeCycle; 10 
11 public class CustomLogContextListener extends ContextAwareBase implements LoggerContextListener, LifeCycle { 12 
13     /** 存儲日誌路徑標識 */
14     public static final String LOG_PAHT_KEY = "LOG_PATH"; 15 
16  @Override 17     public boolean isResetResistant() { 18         return false; 19  } 20 
21  @Override 22     public void onStart(LoggerContext loggerContext) { 23  } 24  @Override 25     public void onReset(LoggerContext loggerContext) { 26  } 27  @Override 28     public void onStop(LoggerContext loggerContext) { 29  } 30  @Override 31     public void onLevelChange(Logger logger, Level level) { 32  } 33 
34  @Override 35     public void start() { 36         String s = System.getProperty("user.dir") + "/logs/"; 37  System.setProperty(LOG_PAHT_KEY, s); 38         Context context = getContext(); 39  context.putProperty(LOG_PAHT_KEY, s); 40  } 41  @Override 42     public void stop() { 43  } 44  @Override 45     public boolean isStarted() { 46         return false; 47  } 48 }

 在logbakc.xml文件中指定上下文監聽類

在日誌配置文件中引入「CustomLogContextListener」(<contextListener class="com.x.x.x.listener.CustomLogContextListener" />)類,app

就能夠直接經過聲明的變量名稱使用路徑(${LOG_PATH}),LOG_PATH就是在CustomLogContextListener類中指定的變量名稱ide

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <configuration  scan="true" scanPeriod="20 seconds" debug="false">
 3     <contextListener class="com.x.x.x.listener.CustomLogContextListener" />
 4     <property name="PROJECT_NAME" value="xxxx" />
 5     <!-- 控制檯輸出日誌 -->
 6     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
 7         <layout class="ch.qos.logback.classic.PatternLayout">
 8             <pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX} ${PROJECT_NAME} [%thread] %-5level %logger{80}[%line]  %msg%n</pattern>
 9         </layout>
10     </appender>
11 
12 
13     <!-- 文件輸出日誌 (文件大小策略進行文件輸出,超過指定大小對文件備份)-->
14     <appender name="FILE-debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
15         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
16             <level>DEBUG</level>
17         </filter>
18         <File>${LOG_PATH}/${PROJECT_NAME}_debug.log</File>
19         <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
20             <FileNamePattern>${LOG_PATH}/${PROJECT_NAME}_debug.%i.log 21             </FileNamePattern>
22             <MinIndex>1</MinIndex>
23             <MaxIndex>10</MaxIndex>
24         </rollingPolicy>
25         <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
26             <MaxFileSize>10MB</MaxFileSize>
27         </triggeringPolicy>
28         <encoder>
29             <pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX} ${PROJECT_NAME} [%thread] %-5level %logger{80}[%line]  %msg%n</pattern>
30         </encoder>
31     </appender>
32 <root level="INFO">
33         <appender-ref ref="STDOUT"/>
34         <appender-ref ref="FILE-debug" />
35         <appender-ref ref="FILE-error" />
36     </root>
37 </configuration>
相關文章
相關標籤/搜索