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】[{……}]

代码封装的比较简单,也很初级,不过还是希望对大家有所帮助,我在实际开发项目中,用它定位异常信息、打印关键节点日志还是非常便利的

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以为你封装一个简单日志工具类,你可以直接在你的 Java 项目中使用。以下是一个示例代码: ```java import java.util.logging.*; public class LoggerUtil { private static final Logger LOGGER = Logger.getLogger(LoggerUtil.class.getName()); public static void configure() { ConsoleHandler handler = new ConsoleHandler(); handler.setLevel(Level.ALL); // 输出所有级别的日志 LOGGER.addHandler(handler); LOGGER.setLevel(Level.ALL); // 输出所有级别的日志 } public static void info(String message) { LOGGER.info(message); } public static void warning(String message) { LOGGER.warning(message); } public static void error(String message) { LOGGER.severe(message); } } ``` 在上面的代码中,我们使用 Java 自带的日志框架 `java.util.logging`,将日志输出到控制台。我们提供了三个方法 `info`、`warning` 和 `error`,分别用于记录信息、警告和错误日志。你可以根据自己的需求扩展这个工具类。 在你的 Java 项目中,你可以在应用程序的入口点中调用 `LoggerUtil.configure()` 方法来配置日志记录器。然后,你就可以在任何地方调用 `LoggerUtil.info()`、`LoggerUtil.warning()` 和 `LoggerUtil.error()` 方法来记录日志了。例如: ```java public class MyApp { public static void main(String[] args) { LoggerUtil.configure(); LoggerUtil.info("这是一个信息日志"); LoggerUtil.warning("这是一个警告日志"); LoggerUtil.error("这是一个错误日志"); } } ``` 当然,你也可以根据需要扩展这个工具类,以支持更多的日志输出方式,如文件、数据库等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值