【问题标题】:Java with log4j带有 log4j 的 Java
【发布时间】:2012-03-14 07:15:26
【问题描述】:

我有一个引发异常的代码,我可以在控制台和日志文件中打印堆栈跟踪,但我希望它只打印在日志文件而不是控制台上。

 try
    {
       ///some code here

    }
    catch(Exception e)
    {
        logger.error("Error", e.fillInStackTrace());
  }

try 块抛出一些异常,我将它记录在我正在使用 log4J.jar fie 的日志文件中

我尝试只打印 Exception 的对象,但它没有打印整个堆栈跟踪帮助我解决这个问题。

【问题讨论】:

    标签: java log4j


    【解决方案1】:

    您只需要在日志调用中传递异常 - 如下所示:

    try {
    ///some code here
    
    } catch(Exception e) {
        logger.error("Error", e);
    } //                      ^
    

    【讨论】:

    • 感谢您的回复,它没有打印整个堆栈,只是打印异常的名称,例如:空指针异常等,
    【解决方案2】:

    您可以尝试使用 getStackTrace() 来获取 StackTraceElement 数组并从中构建您想要的字符串。

    但是,如果通过“...它不会打印整个堆栈跟踪...”,则在查看带有“caused by”子句的堆栈跟踪时,您的意思是“... n more”行,看看这个答案:Print full call stack on printStackTrace()?

    【讨论】:

      【解决方案3】:

      普遍认为,任何以信息或更高级别记录的内容都将打印到控制台。如果您不希望将某些内容打印到控制台,请使用跟踪或调试。

      例如,您可以尝试:

      try
      {
         // some code here
      }
      catch(Exception e)
      {
          logger.error(e);
          // or maybe logger.error("descriptive message: " + e);
      
          logger.debug("Additional info on error", e);
      
          // if that fails you could try:
          StringWriter strWriter = new StringWriter();
          e.printStackTrace(new PrintWriter(strWriter));
          logger.debug("Additional info on error", strWriter.toString());
      
          // or, I can't remember if you said fill in stack trace worked.
          // The point is that you should use debug to log the stack trace
          // as the information is to help you debug and isn't otherwise
          // useful information
          logger.debug("Additional info on error", e.fillInStackTrace());
      }
      

      我添加了一个修复程序,因此应该打印堆栈跟踪。它有点笨重,但由于异常很少见,因此不应给您的程序增加任何明显的开销。

      【讨论】:

      • 它没有在日志文件中打印整个堆栈,它只是在打印 [2012-03-15 14:52:31,046] [INFO] [http-0.0.0.0-8080-3] [ exampleservice.java:500] - 错误:异常名称
      • @vijayakumar 我做了一个可能有帮助的编辑。但是如果没有“DEBUG”输出,那么您的记录器没有记录调试输出,您需要修复您的配置。
      猜你喜欢
      • 2013-12-31
      • 1970-01-01
      • 2015-07-21
      • 2014-05-21
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多