何时应该使用Throwable.printStackTrace()
而不是使用log4j方法error(String, Throwable)
打印错误?
差异在哪里,常见用途是什么?
//欢呼
答案 0 :(得分:4)
Throwable.printStackTrace()将堆栈跟踪打印到标准错误,而log4j方法会将其打印到您喜欢的位置。您可以通过log4j configuration file指定何时以及如何打印堆栈跟踪。
第二种方法是最好的方法,因为您始终可以决定将错误写入标准错误,同时也可以将其打印在滚动文件中。 您的缺点是您需要在项目中使用log4j依赖项,但是还有一些解决方案可以使用log4j而不声明此依赖项并仅在运行时提供它。
编辑:常见的用法是使用log4j api在代码中编写日志,并在部署应用程序的地方配置log4j。 另一种方法是使用java.util.logging编写它们以避免任何直接依赖,并且您可以使用slf4j网桥从您的和第三方代码捕获任何日志并将其传递到您喜欢的日志API(即.log4j )
答案 1 :(得分:2)
通常你不会这样做,因为它会将错误打印到标准错误输出。如果您不保留此消息(文件或数据库),则在关闭控制台后它就会消失。
将此throwable及其回溯打印到标准错误流。
相反,您想要的是通过Logger.error(String, Throwable)登录到文件,您可以在调试生产问题时找到日志文件。除此之外,使用log4j,您可以将日志级别配置为根据不同的环境显示在日志中,例如,在生产中,您可能只记录级别信息,警告和错误级别,而在开发期间,您还要记录调试语句
使用ERROR级别记录消息对象,包括堆栈跟踪 Throwable t作为参数传递。
最常见的用途是通过记录器,除非在生产中你根本不记录任何东西。
答案 2 :(得分:1)
如果您正在记录,则使用Log4J方法。您可以在处理>>,以便在文件/控制台/中显示/读取日志...您可以选择调试级别来显示/隐藏某些信息
Throwable.printStackTrace只会将堆栈跟踪发送到标准错误流。
此外,通过Log4J,您可以轻松地“简化”消息并让用户/开发人员了解最新情况。
编辑: 您可能想看一下SLF4J,它可以让您轻松更改Logging后端(在您的情况下为LOG4J)。
答案 3 :(得分:1)
您优先使用Throwable.printStackTrace()
进行日志记录的唯一情况是:
差异在哪里,常见用途是什么?
基本上,差异在于更高的水平。使用日志记录框架进行日志记录或使用System.err.println
语句进行日志记录是不同的。
前者有许多优点,您可以在各种日志框架的文档和javadoc中找到很好的描述。主要的是:
不可否认,微小的应用程序可能并不需要所有这些,但如果您的应用程序需要完全执行日志记录,那么使用日志记录框架可以免费提供开发或性能最小的开销。