【问题标题】:printStackTrace vs Logger Frameworks in JavaJava 中的 printStackTrace 与 Logger 框架
【发布时间】:2016-11-23 15:29:32
【问题描述】:

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

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

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

提前致谢!

【问题讨论】:

  • 我通常看到两者都被实际使用。我已经看到使用了log4jsl4j,当捕获到异常时,printStacktrace() 的输出被发送到记录器。
  • 感谢蒂姆,但想知道在生产中选择哪个选项,因为我们可以使用配置来实现附加程序和旋转是唯一使它比 printstacktrace() 更有利的事情跨度>
  • 第一个问题中的“稍后实施”是什么意思?
  • 这就像比较将内容保存到文件与使用数据库。如果你只做非常简单的事情,你可能看不出有什么不同。这里同样适用。
  • @Niklas 稍后我打算说我们是否使用 printStackTrace() 反对使用记录器框架

标签: java exception log4j stack-trace printstream


【解决方案1】:

您不应该使用printStackTrace()once it's not a recent thing here 的原因有很多,我们不要重复使用方向盘(特别注意God's Perfect Exception link,确实非常好)。

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢 Niklas 我猜 logger 可以在打印日志消息方面与 printStackTrace() 进行比较,但不能在异常处理方面进行比较,因为这些都不是异常处理,而是对不同文件/流的简单日志。 ...我是对的?
    • 我不确定您所说的“异常处理”是什么意思。我个人在实现业务逻辑时使用术语“异常处理”,当异常发生时该怎么做 - 中止业务逻辑/事务并显示特定错误,中止业务逻辑/事务并显示标准错误并记录详细信息,完成业务逻辑/事务并在后台记录详细信息,... - 所有这些决定都不能由日志框架完成。所以用我的话来说,日志框架不能进行异常处理。
    猜你喜欢
    • 2015-10-06
    • 2019-08-11
    • 1970-01-01
    • 2016-06-06
    • 2012-07-18
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 2011-12-15
    相关资源
    最近更新 更多