log4j.xml 配置日志

log4j.xml 配置系统日志 详细请参考www.cezuwang.com

1 定义log4j.xml

<!-- 输出日志到文件  文件大小到达指定尺寸的时候产生一个新的文件 -->  
    <appender name="appServerLog" class="org.apache.log4j.RollingFileAppender">  
        <param name="File" value="logs/AppServerLog.log"></param>  
        <param name="ImmediateFlush" value="true"/>  
        <param name="Threshold" value="info"></param>  
        <param name="Append" value="true"></param>  
        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />     
        <param name="MaxFileSize" value="102400KB"></param>  
        <param name="MaxBackupIndex" value="100"></param>  
        <layout class="org.apache.log4j.PatternLayout">  
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS} %p [%c-%M-%L]:%m%n"></param>  
        </layout>  
    </appender> 


2 定义spring 日志切面

<!-- 日志切面类 -->
   <bean id="logInterceptor" class="com.utcip.server.common.interceptor.AppServiceInterceptorLog"/>  
	
    <aop:config>  
         <aop:aspect id="securityAspect" ref="logInterceptor">  
             <aop:pointcut id="logMethod" expression="execution(* com.utcip.server.*.service.impl.*.*.*(..))  and args(..)"/> 
             <aop:before method="beforeMethod" pointcut-ref="logMethod"/>  
             <!-- <aop:after method="afterMethod" pointcut-ref="logMethod"/>  --> 
         </aop:aspect>  
     </aop:config> 


/**
 * 接口日志切面
 * @author jingfangnan
 *
 */
public class AppServiceInterceptorLog {
	
	/**
	 * 前置切入
	 */
	public void beforeMethod(JoinPoint jp){
		String className = jp.getSignature().getDeclaringTypeName();
		String methodName = jp.getSignature().getName();
		
		Object[] args = jp.getArgs(); 
		AppServiceLog.info("on {} the params of {}.{} is {} ",AppUtils.getDisplayDate(new Date()),
				className,methodName,
				Arrays.toString(args));
	}
	
	/**
	 * 后置切入
	 */
	public void afterMethod(JoinPoint jp){
		String className = jp.getSignature().getDeclaringTypeName();
		String methodName = jp.getSignature().getName();
		Object[] args = jp.getArgs(); 
		
		AppServiceLog.info("on {} the result  is{}",AppUtils.getDisplayDate(new Date()),
				className,methodName,
				Arrays.toString(args));
	}
}


3 日志切面中 引用log4j.xml 定义的日志标记

/**
 * 接口自定义日志输出
 * @author jingfangnan
 *
 */
public class AppServiceLog {
	/** The log. */
	private final static  Logger log = LoggerFactory.getLogger(LoggerSpecialEnum.AppServerLog.value());  
	
	public static void log(String value, Object ... params){
		log.debug(value,params);
	}
	
	public static void info(String value, Object ... params){
		log.info(value,params);
	}
	
	public static void warn(String value, Object ... params){
		log.warn(value,params);
	}
	
	public static void error(String message,Exception e){
		log.error(message,e);
	}
	
	public static void error(String message, Object ... params){
		log.error(message, params);
	}
	
	public static boolean isInfoEnabled(){
		return log.isInfoEnabled();
	}
}


4 日志打印输出类中  引用log4j.xml 中的定义

/**
 * 日志枚举
 * @author jingfangnan
 *
 */
public enum LoggerSpecialEnum {
	
	// 接口类日志
	AppServerLog("appServerLog", "自定义接口日志")
		
	;
		
	private final String value;
	private final String desc;

	private LoggerSpecialEnum(final String value, final String desc) {
		this.value = value;
		this.desc = desc;
	}

	public  String value() {
		return this.value;
	}

	public String desc() {
		return this.desc;
	}
		
}


至此 就可以在指定的层面打印出相关日志了

猜你喜欢

转载自annan211.iteye.com/blog/2334027
今日推荐