logback系列之七:繼承RollingFileAppender,儲存自定義檔名的日誌
阿新 • • 發佈:2019-01-05
繼承類:
package com.hk3t.air.system.log; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.rolling.RollingFileAppender; import com.hk3t.air.utils.MyConstants; /** * @author Sunny * * 2016-8-23 */ public class UserFileAppender extends RollingFileAppender<ILoggingEvent> { private String currentlyActiveFile; @Override protected void subAppend(ILoggingEvent event){ if(currentlyActiveFile == null){ currentlyActiveFile = getFile(); } String activeFile = currentlyActiveFile; if(event.getMdc() != null){ if(event.getMdc().get(MyConstants.LOG_USER_KEY) != null && event.getMdc().get(MyConstants.LOG_FILEPATH_KEY) != null){ activeFile = event.getMdc().get(MyConstants.LOG_FILEPATH_KEY); }else{ if(event.getMdc().get(MyConstants.LOG_USER_KEY) != null){ activeFile = activeFile.replace("{LOG_USER}", event.getMdc().get(MyConstants.LOG_USER_KEY)); } if(event.getMdc().get(MyConstants.LOG_IP_KEY) != null){ activeFile = activeFile.replace("{LOG_IP}", event.getMdc().get(MyConstants.LOG_IP_KEY)); } } } setFile(activeFile); start(); super.subAppend(event); } }
XML配置
<appender name="USERFILE" class="com.hk3t.system.log.UserFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <filter class="com.hk3t.system.log.UserNameFilter"></filter> <file>${log.base}/user/user_{LOG_USER}_{LOG_IP}.log</file> <!-- 無法歸檔user.log日誌,只有當session和ip都相同時(即檔名相同)。才會進行回滾的操作 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>${log.base}/%d{yyyy-MM-dd}_user_log.log</FileNamePattern> <minIndex>1</minIndex> <MaxHistory>2</MaxHistory> </rollingPolicy> --> <encoder> <pattern>%date [%contextName] [%marker] [%thread] [%X{LOG_IP}] [%X{LOG_USER}] %-5level %logger{80} - %msg%n</pattern> </encoder> <append>true</append> <prudent>false</prudent> </appender>