2016-11-23 90 views
1

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

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

  1. 稍后的实现是否会处理异常,或者只是将异常打印到文件?
  2. 基于什么理由在生产环境中实现Logger框架优于printStacktrace()

在此先感谢!

+0

我通常看到两者都被实际使用。我已经看到使用了'log4j'和'sl4j',并且在发生异常时,'printStacktrace()'的输出被发送到记录器。 –

+0

感谢蒂姆,但想知道在生产中选择哪个选项,因为我们可以使用配置来实现appender和旋转,这是唯一使printstacktrace更有利的事情() –

+0

您对“稍后的实现“在第一个问题? –

回答

0

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

+0

谢谢尼克拉斯我猜记录器可以与printStackTrace()在打印方面日志消息,但不是在异常处理方面,因为这些都不会执行异常处理,而只是简单地将日志记录到不同的文件/流......我是正确的? –

+0

我不确定你的意思是“异常处理”。当我实现业务逻辑时,我个人会使用术语“异常处理”,当发生异常时,应该怎么做 - 中止业务逻辑/事务并显示特定错误,中止业务逻辑/事务并显示标准错误并记录详细信息,完成业务逻辑/事务并在后台记录详细信息,... - 所有这些决策都不能由日志框架完成。所以用我的话说,我会说一个日志框架不能做异常处理。 –

0

有很多的原因,你不应该使用printStackTrace()和,once it's not a recent thing here,让我们不要reivent轮(特别注意的God's Perfect Exception link,一个确实很好)。

日志框架允许我们很多东西(这么多):

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

自定义添加器的功能,特别是伟大的,因为我们可以将日志发送到非文件的目标,像SplunkSumo LogicLogglylogstash等,正如许多企业已经这样做了时下分析和监控他们的生产系统。

另外,考虑analysing the right logging framework为您的需要。