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; } }
至此 就可以在指定的层面打印出相关日志了