40、Java 日誌輸出的簡單封裝

package com.lill.test.utils;
import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;

public class LogUtils {
    
    private static int originStackIndex = 2;
    /**
     * 獲取當前文件名稱
     * @return
     */
    public static String getFileName() {
        return Thread.currentThread().getStackTrace()[originStackIndex].getFileName();
    }

    /**
     * 獲取當前類名稱
     * @return
     */
    public static String getClassName() {
        return Thread.currentThread().getStackTrace()[originStackIndex].getClassName();
    }

    /**
     * 獲取當前方法名稱
     * @return
     */
    public static String getMethodName() {
        return Thread.currentThread().getStackTrace()[originStackIndex].getMethodName();
    }

    /**
     * 獲取當前代碼行號
     * @return
     */
    public static int getLineNumber() {
        return Thread.currentThread().getStackTrace()[originStackIndex].getLineNumber();
    }

    /**
     * 打印文本信息
     * @param logger
     * @param message
     * @param remark
     */
    public static void writeLogger(Logger logger, String message, String remark){
        StackTraceElement ste = Thread.currentThread().getStackTrace()[originStackIndex];
        writeLogger(logger, ste.getLineNumber(), ste.getMethodName(), remark, message);
    }

    /**
     * 打印實體信息
     * @param logger
     * @param obj
     * @param remark
     */
    public static void writeLogger(Logger logger, Object obj, String remark){
        String message = JSON.toJSONString(obj);
        StackTraceElement ste = Thread.currentThread().getStackTrace()[originStackIndex];
        writeLogger(logger, ste.getLineNumber(), ste.getMethodName(), remark, message);
    }

    /**
     * 打印異常信息
     * @param logger
     * @param remark
     * @param e
     */
    public static void writeException(Logger logger, String remark, Throwable e){
        StackTraceElement ste = Thread.currentThread().getStackTrace()[originStackIndex];
        writeException(logger, ste.getLineNumber(), ste.getMethodName(), remark, e);
    }

    /**
     * 打印文本信息
     * @param logger
     * @param message
     * @param remark
     */
    public static void writeErrorLogger(Logger logger, String message, String remark){
        StackTraceElement ste = Thread.currentThread().getStackTrace()[originStackIndex];
        writeErrorLogger(logger, ste.getLineNumber(), ste.getMethodName(), remark, message);
    }

    /**
     * 打印實體信息
     * @param logger
     * @param obj
     * @param remark
     */
    public static void writeErrorLogger(Logger logger, Object obj, String remark){
        String message = JSON.toJSONString(obj);
        StackTraceElement ste = Thread.currentThread().getStackTrace()[originStackIndex];
        writeErrorLogger(logger, ste.getLineNumber(), ste.getMethodName(), remark, message);
    }

    /**
     * 打印異常信息
     * @param logger
     * @param remark
     * @param e
     */
    public static void writeErrorException(Logger logger, String remark, Throwable e){
        StackTraceElement ste = Thread.currentThread().getStackTrace()[originStackIndex];
        writeErrorException(logger, ste.getLineNumber(), ste.getMethodName(), remark, e);
    }

    private static void writeLogger(Logger logger, int number, String methodName, String remark, String message){
        logger.info(message(number, methodName, remark) + message);
    }

    private static void writeErrorLogger(Logger logger, int number, String methodName, String remark, String message){
        logger.error(message(number, methodName, remark) + message);
    }

    private static void writeWarnLogger(Logger logger, int number, String methodName, String remark, String message){
        logger.warn(message(number, methodName, remark) + message);
    }

    private static void writeDebugLogger(Logger logger, int number, String methodName, String remark, String message){
        logger.debug(message(number, methodName, remark) + message);
    }

    private static void writeException(Logger logger, int number, String methodName, String remark, Throwable e){
        logger.info(message(number, methodName, remark), e);
    }

    private static void writeErrorException(Logger logger, int number, String methodName, String remark, Throwable e){
        logger.error(message(number, methodName, remark), e);
    }

    private static void writeWarnException(Logger logger, int number, String methodName, String remark, Throwable e){
        logger.warn(message(number, methodName, remark), e);
    }

    private static void writeDebugException(Logger logger, int number, String methodName, String remark, Throwable e){
        logger.debug(message(number, methodName, remark), e);
    }

    private static String message(int number, String methodName, String remark){
        return "【第"+ number +"行】【"+ methodName +"】【"+ remark+"】";
    }


}

實際運用

package com.lill.test.filter;

import com.lill.test.LogUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;

/**
 * 全局異常處理中心
 */
@ControllerAdvice
public class GlobalDefaultExceptionHandler{

    private Logger logger = LoggerFactory.getLogger(GlobalDefaultExceptionHandler.class);

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public JsonResult exceptionHandler(HttpServletRequest request, Exception e){
        LogUtils.writeErrorLogger(logger, e.getStackTrace(), e.getLocalizedMessage());
        
    }
}

日誌輸入

2019-08-13 14:37:37.475 [http-nio-8181-exec-1] ERROR com.lill.test.filter.GlobalDefaultExceptionHandler - 【第26行】【exceptionHandler】【Request method 'GET' not supported】[{……}]

代碼封裝的比較簡單,也很初級,不過還是希望對大家有所幫助,我在實際開發項目中,用它定位異常信息、打印關鍵節點日誌還是非常便利的

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章