log4j+slf4j+HandlerExceptionResolver 日志系统

来源:互联网 发布:php过滤敏感词的例子 编辑:程序博客网 时间:2024/06/06 04:36

1、log4j + slf4j
(1)引入jar包,maven

<dependency>    <groupId>org.slf4j</groupId>    <artifactId>slf4j-api</artifactId>    <version>1.7.0</version></dependency><dependency>    <groupId>org.slf4j</groupId>    <artifactId>slf4j-log4j12</artifactId>    <version>1.7.0</version></dependency><dependency>    <groupId>log4j</groupId>    <artifactId>log4j</artifactId>    <version>1.2.17</version></dependency> 

(2)配置log4j.properties,并引用。截取部分配置
如果改文件处理src目录下,则无需单独引用;如果不是,可以再web.xml进行引用
请参考https://github.com/GraduationTeam/log2/blob/master/src/main/resources/log4j.properties

log4j.logger.errorList = DEBUG,errorListlog4j.appender.errorList = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.errorList.Threshold = DEBUGlog4j.appender.errorList.File =  ${catalina.home}/logs_dygk/gkweb/errorList.loglog4j.appender.errorList.Append = truelog4j.appender.errorList.layout=org.apache.log4j.PatternLayoutlog4j.appender.errorList.layout.ConversionPattern=[ %p ] - %-d{yyyy-MM-dd HH:mm:ss}  %m%nlog4j.appender.errorList.encoding=UTF-8log4j.additivity.errorList = false

(3)日志工具类,截取部分代码
【思想:错误日志分成列表+详情】
可以参考https://github.com/GraduationTeam/log2/blob/master/src/main/java/com/util/LogUtils.java

import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class LogUtils {    public static Logger getErrorListLogger(){        return LoggerFactory.getLogger("errorList");    }    public static Logger getErrorDetailLogger(){        return LoggerFactory.getLogger("errorDetail");    }    public static void printLog(Exception ex, HttpServletRequest request){        printLog_logType_(ex, request, "info", getLocalInfo());    }    private static void printLog_logType_(Exception ex, HttpServletRequest request, String logType, String localInfo){        String uuid = UUID.randomUUID().toString().replace("-", "");//通过uuid使得errorList和errorDetail进行关联        getErrorListInfo_(ex, request, null, uuid, logType, localInfo);        getErrorDetailInfo_(ex, request, uuid, logType, localInfo);   }    private static void getErrorListInfo_(Exception ex, HttpServletRequest request, String message, String uuid, String logType, String localInfo){        message = getMessage(ex, message);        if(StringUtils.isNotBlank(logType)){            logType = logType.toLowerCase();            switch(logType){                case "debug":                    getErrorList_DebugType(ex, request, message, localInfo, uuid);                    break;                case "info":                    getErrorList_InfoType(ex, request, message, localInfo, uuid);                    break;                case "warn":                    getErrorList_WarnType(ex, request, message, localInfo, uuid);                    break;                case "error":                    getErrorList_ErrorType(ex, request, message, localInfo, uuid);                    break;                default:                    getErrorList_InfoType(ex, request, message, localInfo, uuid);                    break;            }        }else if(isErrorTypePrint(request)){            getErrorList_ErrorType(ex, request, message, localInfo, uuid);        }else{            getErrorList_InfoType(ex, request, message, localInfo, uuid);        }    }    private static void getErrorList_InfoType(Exception ex, HttpServletRequest request, String message, String localInfo, String uuid){        LogUtils.getErrorListLogger().info("[ {} ] -- [uuid:{}] url:{} ; params:{}; error: {}: {}", localInfo, uuid, request.getRequestURI(), getParamsByRequest(request), ex.getClass(), message);    }    public static String getLocalInfo(Integer statckTrace){        Date beforDate = new Date();        StackTraceElement ste = Thread.currentThread().getStackTrace()[statckTrace];          String className = ste.getClassName();          String methodName = ste.getMethodName();          int lineNumber = ste.getLineNumber();          return  StringUtil.spliceStr(className, ".", methodName, "(", lineNumber, "); ", "consumTimes:", new Date().getTime() - beforDate.getTime(), "ms");      }}

(4)打印日志,在try-catch中引用等

2、捕捉抛出的异常
 实现 HandlerExceptionResolver 接口,重写resolveException 进行异常处理
代码块如下:

import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerExceptionResolver;import org.springframework.web.servlet.ModelAndView;/** * 捕捉抛出的异常 * * @author Administrator */public class CustomHandlerExceptionResolver implements HandlerExceptionResolver{    @Override    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {        LogUtils.printLog(ex, request);        return new ModelAndView("404");    }}
原创粉丝点击