1. 程式人生 > >logback系列之七:繼承RollingFileAppender,儲存自定義檔名的日誌

logback系列之七:繼承RollingFileAppender,儲存自定義檔名的日誌

繼承類:
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>