当前位置: 首页 > 知识库问答 >
问题:

为什么我在使用Logger.error(“msg”,e)时没有打印堆栈跟踪?

常永怡
2023-03-14
try{
   ……
}catch(Exception e){
   ……
   logger.error(String.format("deliverTask error:%s",e.getMessage()),e);
}

日志输出为

deliverTask error:null
try{
   ……
}catch(Exception e){
   ……
   logger.error(String.format("deliverTask error:%s",e.toString()),e);
}

日志输出为

deliverTask error:java.lang.NullPointerException

为什么会这样?为什么不打印异常详细信息?我必须做什么才能获得堆栈跟踪信息?

日志框架:org.slf4j 1.7.26 logback 1.2.3

共有1个答案

黄沈浪
2023-03-14

我没有发现代码结构有任何问题,我尝试了类似的示例,它正在打印异常详细信息。

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class LoggerExample {
    public static void main(String[] args) {
        int a = 5;
        try{
            a = 5/0;
        }catch(Exception e){
            log.error(String.format("Something went wrong:%s",e.getMessage()),e);
        }
    }
}

输出:-

main] ERROR test.LoggerExample - Something went wrong:/ by zero
java.lang.ArithmeticException: / by zero
    at test.LoggerExample.main(LoggerExample.java:13)

您可能需要检查记录器配置。我刚刚使用了lombok,其中配置非常简单,您只需要在pom中添加以下代码片段。xml并用@Log或其变体进行注释,我使用了@Slf4j。

            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.24</version>
                <scope>provided</scope>
            </dependency>
 类似资料:
  • 我使用以下代码打印try-catch块中发生的任何异常,但是当异常发生时,logback不会打印完整的堆栈跟踪,而是写入一行错误(它没有明确说明是什么导致了它。我如何在logback输出中打印完整的堆栈跟踪? 尝试捕获异常的catch块 日志返回错误输出:

  • 问题内容: 如何将异常的堆栈跟踪信息打印到stderr以外的流上?我发现的一种方法是使用getStackTrace()并将整个列表打印到流中。 问题答案: 可以接受or或参数: 也就是说,请考虑将SLF4J之类的记录器接口与LOGBack或log4j之类的记录实现一起使用。

  • 如何将堆栈跟踪打印到logcat? 当应用程序在Eclipse中运行并且应用程序崩溃时,我会在logcat窗口中收到一系列消息,如“致命异常:main”,并打印堆栈跟踪。但是,当我从命令行使用adb logcat命令时,我没有看到任何这些消息?我看到的只是一条信息,上面写着一个例子。应用程序已经死了。 如何使用adb logcat命令获得Eclipse logcat窗口中显示的相同堆栈跟踪? 编辑

  • 我需要一个数据结构用于我的用例。我应该能够将项目推入数据结构,并且我只想从堆栈中检索最后一个项目。JavaDoc for Stack表示:

  • 问题内容: 是否有一种特殊的机制来强制scrapy打印出所有python异常/堆栈跟踪。 我犯了一个简单的错误,即弄错了一个列表属性,导致AttributeError出现,该错误未在日志中完整显示: 因此它显示的AttributeError计数为1,但是没有告诉我在哪里以及如何进行操作,我不得不手动在代码中放置ipdb.set_trace()来找出哪里出错了。Scrapy本身继续执行其他线程而不打

  • 问题内容: 我的类的实例变量之一正在发生某些事情。我想将变量设置为属性,并且每当访问该变量时,我都希望打印出导致该点的所有代码的堆栈跟踪,因此我可以看到它的混乱之处。没有异常发生时如何打印堆栈跟踪?我知道是否有例外,我可以做类似的事情。 同样有用的是仅打印最后3-4个级别,因为前几个级别可能不会那么有趣。 问题答案: : 编辑:您还可以使用extract_stack,获取一个切片(例如,排除前5个