printStackTrace与Java中的Logger框架
在Java中,异常处理可以通过多种方式完成。让我们使用Logging框架将异常处理区分为log4j
或sl4j
,其中除了处理异常外,这两者都可以将日志重定向到文件。printStackTrace与Java中的Logger框架
如果不是Logger框架,我们使用异常类方法printStackTrace()
来处理异常,并通过将异常调用堆栈重定向到文件而不是标准错误输出/控制台来获取异常调用堆栈,现在,下面是问题:
- 稍后的实现是否会处理异常,或者只是将异常打印到文件?
- 基于什么理由在生产环境中实现Logger框架优于
printStacktrace()
?
在此先感谢!
至2) 日志框架并不是更好的文件处理程序,但是,例如,提取注销代码的配置。因此,当您更改配置时(例如开发和生产的日志的其他详细级别),您不必更改代码 - 您只需为每个测试阶段使用其他日志记录框架配置。 如果要更改日志文件名称,日志文件大小(旋转)或不同包或类的特定日志详细信息,可以通过修改配置轻松完成此操作。
谢谢尼克拉斯我猜记录器可以与printStackTrace()在打印方面日志消息,但不是在异常处理方面,因为这些都不会执行异常处理,而只是简单地将日志记录到不同的文件/流......我是正确的? –
我不确定你的意思是“异常处理”。当我实现业务逻辑时,我个人会使用术语“异常处理”,当发生异常时,应该怎么做 - 中止业务逻辑/事务并显示特定错误,中止业务逻辑/事务并显示标准错误并记录详细信息,完成业务逻辑/事务并在后台记录详细信息,... - 所有这些决策都不能由日志框架完成。所以用我的话说,我会说一个日志框架不能做异常处理。 –
有很多的原因,你不应该使用printStackTrace()
和,once it's not a recent thing here,让我们不要reivent轮(特别注意的God's Perfect Exception link,一个确实很好)。
日志框架允许我们很多东西(这么多):
- 在同一时间发送我们的日志到不同的地方。他们中的大多数都带有几个appender,可以处理控制台和文件输出,并使用电子邮件或JMS发送日志消息,例如:
- 自定义具有严重级别,来源,过滤器密钥环等的消息;
- 基于xml/properties文件的简单和自定义配置,无需更改Java代码;
- 良好的异步处理,主要用于分布式系统;
- 详细配置,设置您的例外将被记录的方式;
- 等
自定义添加器的功能,特别是伟大的,因为我们可以将日志发送到非文件的目标,像Splunk,Sumo Logic,Loggly,logstash等,正如许多企业已经这样做了时下分析和监控他们的生产系统。
另外,考虑analysing the right logging framework为您的需要。
我通常看到两者都被实际使用。我已经看到使用了'log4j'和'sl4j',并且在发生异常时,'printStacktrace()'的输出被发送到记录器。 –
感谢蒂姆,但想知道在生产中选择哪个选项,因为我们可以使用配置来实现appender和旋转,这是唯一使printstacktrace更有利的事情() –
您对“稍后的实现“在第一个问题? –