Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 伐木良好做法_Java_Logging - Fatal编程技术网

Java 伐木良好做法

Java 伐木良好做法,java,logging,Java,Logging,我使用sl4j/logback作为日志框架。我不确定记录错误的正确方法。也就是说,假设e是我想要记录的异常,我总是在以下两种情况之间犹豫: logger.error(“发生了错误:{}\n错误:{}”,someInfo,e.getMessage()) 我知道这不是一个好的做法,因为堆栈跟踪丢失了——不太了解发生了什么 logger.error(“发生了错误:{}\n错误:{}”,someInfo,e.getMessage(),e) 同时使用e.getMessage()和e似乎是多余的,尽管我不

我使用sl4j/logback作为日志框架。我不确定记录错误的正确方法。也就是说,假设e是我想要记录的异常,我总是在以下两种情况之间犹豫:

  • logger.error(“发生了错误:{}\n错误:{}”,someInfo,e.getMessage())

    我知道这不是一个好的做法,因为堆栈跟踪丢失了——不太了解发生了什么

  • logger.error(“发生了错误:{}\n错误:{}”,someInfo,e.getMessage(),e)

    同时使用
    e.getMessage()
    e
    似乎是多余的,尽管我不知道
    e.getMessage()
    是否可能包含额外的信息,如果我使用:

  • logger.error(“发生了错误:{}”,someInfo,e)

    这是我通常使用的语法-但我想确保我没有遗漏任何东西


  • 我通常使用数字2,虽然我从未将日志的一行拆分为两行(\n),但在打印堆栈跟踪时,这并不重要(在所有其他情况下,当日志变得非常巨大时,它会产生太多的视觉熵)

    为什么我要用数字2

    我想马上看到第一行的信息,因为这是告诉我发生了什么的第一件事。有些可能是预期的,我可以安全地跳过它们,有些可能不是

    如果我需要检查到底发生了什么,我会更好地查看堆栈跟踪

    我认为3号也可以,因为你会得到你需要的信息。 永远不要使用选项1


    顺便说一句,这只是一个特别的观点,说错误线路上发生了一些不好的事情有点多余;)

    如果你看一下Throwable的源代码(http://www.docjar.com/html/api/java/lang/Throwable.java.html)你会发现,当一个被要求打印stacktrace时,Throwable会先打印它自己,然后打印它的消息


    我发现不太可能有人会改变这种行为,所以你的论点都是正确的,而且3。选项很好

    您肯定想要堆栈跟踪。 当您执行了“错误:无法找到ID为{0}的客户”之类的操作时,此消息非常方便,因为它可能不在stacktrace中。这是一个微不足道的例子,但你明白我的意思

    另一个消息是,如果你像csv那样做日志,那么你可以分析它。您可以生成一条消息,并使筛选更容易

    最后但并非最不重要的是,错误日志中的冗余信息问题要小得多,那么您不需要的信息就不在其中了。我的指导原则是过分冗长

    哦,这是为了控制对日志文件的访问,例如,在asp中不要说将堆栈跟踪作为响应。我做梦也想不到