首页 > 编程语言 > Java 如何在日志中优雅的打印 Exception

Java 如何在日志中优雅的打印 Exception

时间:2022-12-19 23:11:25浏览次数:39  
标签:Exception Java 打印 something error MyDemo 日志 public

一、使用 log 库打印

使用 log 库如 slf4j

@Slf4j
public class MyDemo {
    public void demo() {
        try {
            int a = 10 / 0;
        }
        catch (Exception e) {
            // 注意用逗号后面接 exception,才会打印出完整的 stacktrace
            log.error("A something error", e);
            // 用加号连接只会打印 exception 名称
            log.error("B something error" + e);
        }
    }
}

执行结果

# 第一种打印出完整 stacktrace
22:58:41.064 [main] ERROR com.shuofxz.MyDemo - A something error
java.lang.ArithmeticException: / by zero
	at com.youdao.analysis.queqiaohealthcheck.MyDemo.main(MyDemo.java:9)

#第二种仅打印了 exception 的名称    
22:58:41.066 [main] ERROR com.shuofxz.MyDemo - B something errorjava.lang.ArithmeticException: / by zero

二、将 stacktrace 转换为 String

有时候需要将报错完整信息,以字符串的方式返回(如从客户端也能知道服务端具体报错的原因)

public class MyExceptionUtil {
    public static void main(String[] args) {
        Exception e = new Exception("my exception test");
        System.out.println(covertStackTraceToString(e));
    }

    public static String covertStackTraceToString(Exception e) {
        StringWriter sw = new StringWriter();
        e.printStackTrace(new PrintWriter(sw));
        return sw.toString();
    }
}

标签:Exception,Java,打印,something,error,MyDemo,日志,public
From: https://www.cnblogs.com/shuofxz/p/16993350.html

相关文章

  • 利用log4j+mongodb实现分布式系统中日志统
    背景   在分布式系统当中,我们有各种各样的WebService,这些服务可能分别部署在不同的服务器上,并且有各自的日志输出。为了方便对这些日志进行统一管理和分析。我们可以将......
  • JAVA选择结构
    基本选择结构:if(条件){}如果条件成立,执行if里面的代码条件的结果是boolean值逻辑运算符:与:条件1&&条件2两个条件都成立,则为true或:条件1......
  • Gradle 教程说明 用户指南 第7章 构建Java工程----快速入门
    官网地址:http://www.gradle.org/docs/2.1/userguide/tutorial_java_projects.htmlAbasicJavaproject 一个基础的java工程使用java插件在build.gradle:applyplugin:'......
  • java表单工具都有哪些特点?
    随着数字化进程步伐的加快,java表单工具也逐渐在传统的表单制作工具中脱颖而出,成为提质增效的有利工具。那么,java表单工具都有哪些特点?为了帮助大家解答疑惑,小编特意整理出......
  • java 字节流和字符流的区别
    字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用......
  • @ControllerAdvice 和@ExceptionHandler出现白页
    统一异常@ControllerAdvice和@ExceptionHandler出现白页去除@ControllerAdvice 控制器继承@ExceptionHandler所在类就没有问题出现错误   不出现错误去掉@con......
  • Java执行操作系统命令-Process抽象类(1)
    Java8Windows10EclipseVersion:2022-09(4.25.0)-- 序章测试使用Java程序执行操作系统命令。ben发布于博客园需要用到抽象类Process://@sinceJDK1.0publ......
  • Java关键词final解读
    目录1final基本用法1.1final修饰变量1.2final修饰方法参数1.3final修饰方法1.4final修饰类1.5空白final1.6staticfinal2jvm角度理解final不可变性3final多线程下......
  • Java笔记(7)——equals和toString方法的重写和一个例子
    1.Object类​​Object​​​类是所有类的根父类,如果在类中没有​​extends​​关键字指明其父类,默认其父类为Object类。2.==与equals方法的区别​​==​​​:是否指向了同......
  • Java笔记(8)——重载(Overload)与重写(Override)的区别
    1、重写(Override)  重写是子类对允许访问的父类的方法进行重新编写的过程,方法名、返回值和参数列表不能变,方法中的内容可以变化。特点就是:子类可以根据自己的需要对父类的......