Java 中的 printStackTrace 与 Logger 框架

printStackTrace vs Logger Frameworks in Java

在Java中,异常处理可以通过多种方式完成。让我们将使用日志框架的异常处理区分为 log4jsl4j,其中除了处理异常之外,这两者都可以将日志重定向到文件。

如果我们不使用 Logger 框架,而是使用异常 class 方法 printStackTrace() 来处理异常并通过将异常重定向到文件而不是标准错误来获取异常调用堆栈 output/console,现在,问题如下:

  1. 以后的实现会完全处理异常还是简单地将异常打印到文件?
  2. 在生产环境中实施 Logger 框架优于 printStacktrace() 的理由是什么?

提前致谢!

至 2) 日志记录框架不是更好的文件处理程序,而是例如从代码中提取注销配置。因此,当您更改配置(例如,开发和生产日志的其他详细级别)时,您不必更改代码——您只需在每个测试阶段使用其他日志框架配置。 如果您想更改日志文件名、日志文件大小(旋转)或不同包的特定日志详细信息或类,您可以通过修改配置轻松实现。

您不应该使用 printStackTrace()once it's not a recent thing here, let's not reivent the wheel (special attention for the God's Perfect Exception link 的原因有很多,确实非常好)。

日志框架允许我们做很多事情(很多):

  • 同时将我们的日志发送到不同的地方。它们中的大多数都带有几个附加程序,这些附加程序可以执行诸如控制台和文件输出之类的操作,并使用电子邮件或 JMS 发送日志消息,例如;
  • 使用严重级别、来源、过滤器密钥环等自定义消息;
  • 基于 xml/properties 文件的简单自定义配置,无需更改 Java 代码;
  • 良好的异步处理,主要用于分布式系统;
  • 详细配置,设置记录异常的方式;
  • 等等

自定义 appender 功能特别棒,因为我们可以将日志发送到非文件目的地,如 Splunk, Sumo Logic, Loggly, logstash 等。就像现在许多公司已经在做的那样,以分析和监控他们的生产系统。

此外,请考虑 analysing the right logging framework 满足您的需求。