2009-12-30 67 views
15

什么是编码时使用log4j级别的最佳做法。 我的意思是什么时候我们使用INFO日志记录,何时使用DEBUG日志记录/错误日志记录等。log4J级别的使用

+1

相当主观的。也许社区Wiki将是适当的? – bmargulies 2009-12-30 04:04:50

回答

7

最好的学习方式是通过示例。阅读一些开源事物的来源,例如,哦,Tomcat或任何在你的应用领域,看看你看到什么。

+0

休眠是另一个很好的参考 – 2009-12-30 04:58:27

+0

休眠实际上不是这样一个伟大的IMO参考,请参阅我的答案中的链接。我认为春天是一个很好的例子,以及石英,axis2和类似的项目 – Yoni 2009-12-31 07:25:40

0

错误日志记录应该始终处于打开状态。

INFO + DEBUG在追踪问题/错误时应该打开。

+0

他是指'使用',如'启用'或'使用',如'我在什么时候打电话'? – bmargulies 2009-12-30 04:06:56

+0

嗯,好点! – 2009-12-30 04:08:03

+0

感谢您的回复。 从您的回应中,我读到ERROR是生产中应该使用的级别,INFO/DEBUG需要根据故障排除情况下的要求进行设置。 Pleae澄清我是否正确。 – 2009-12-30 04:09:03

18

一般情况下,我遵循以下原则:

  • DEBUG:低层次的东西。高速缓存命中,高速缓存未命中,开放数据库连接
  • 信息:有商业意义的事件 - 创造顾客,充电CC ...
  • WARN:可能是一个问题,但不会停止你的应用程序。电子邮件地址未找到/无效
  • 错误:意外的问题。无法打开数据库连接。等等...
+0

log4j也有一个[致命](https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Level.html#FATAL)级别和一个[TRACE](https://日志记录。 apache.org/log4j/1.2/apidocs/org/apache/log4j/Level.html#TRACE)级别。对于log4j2见[此页](https://logging.apache.org/log4j/2.0/log4j-api/apidocs/org/apache/logging/log4j/Level.html) – 2016-10-08 01:07:48

10

我的底线始终是INFO水平相当于到System.out,和错误相当于System.err的。

调试 - 在这里,您可以放置​​所有跟踪信息,特别是当您的“舒适级别”为system.out时不希望看到的信息。

信息 - 使用这一个用于应用程序相关消息的一般消息,进度消息,但不用于跟踪。

WARN - 提供报警,什么是错,也许是意外,或者一种解决方法是使用,但是应用程序仍然可以继续(套接字超时/重试,无效的用户输入等)。

错误 - 关于阻止您的应用正常继续的问题的警报,例如,数据库已关闭,缺少引导程序配置。

编写库时常见的错误是使用ERROR级别来指示调用应用程序(使用库的代码)的问题,而不是指示库本身内的实际错误。例如,看看这个休眠错误 - >http://opensource.atlassian.com/projects/hibernate/browse/HHH-3731

这真的很烦人,因为来自ERROR级别的消息实际上很难抑制,所以只能用它们来表示您自己的代码存在问题。

全部 - 我没有真正使用这个,它几乎和DEBUG或TRACE一样。

+0

另外,NHibernate的使用INFO级别记录每它生成的SQL语句令人恼火,因为我倾向于在生产系统中默认保留INFO。这应该是DEBUG恕我直言。 – Andy 2012-05-21 08:18:21

+0

我同意意义列表,但是我对System.out/err有很不同的理解(这是基于Unix shell的:out是用于“用户希望的输出”,而err是“可能会帮助如果应用程序执行日志记录需要修复“。因此,所有* log4j输出是System.err的东西;命令行应用程序将他们的System.out的东西发送到System.out; webapps发送他们的System.out的东西到网络响应DTO)。删除或忽略“我的基准”段落可能更好。 – jackr 2018-01-26 19:53:12

0

对于别人提到的,我会添加TRACE和FATAL级别,前者对于非常详细的日志记录非常有用,后者则表示总显示停止。正如上面提到的那样,关于如何使用关卡的通用指南。然而,最重要的是如何使用它以及如何解释这些数据。您需要关注问题的级别,因此请确定您的案例中存在什么问题。您的用户几乎不需要跟踪或调试语句,但他们肯定会想出问题并将其报告给您。

2

尽管这个问题很老,这确实是每个开发者都应该知道的重要的一点,我强烈建议您检查Apache log4j的官方页面。

而且我发现和有用的图像描述这个完美,从supportweb.cs.bham.ac.uk/documentation/tutorials/docsystem/build/tutorials/log4j/log4j.html

2

TRACE采取log4jImage: 最低级别的日志。提供最详细的信息。

调试: 这里的日志声明旨在帮助开发人员。您的应用程序的详细状态。

信息: 一般商业信息。您的应用程序的进度和状态

警告: 有关意外事件的警告。这些不够严重,不能放弃你的申请。

错误: 您的应用程序中存在严重问题。

在不同的环境中打开适当的日志级别同样重要。

0

这里有一些指引我用:

  • TRACE:详细日志记录非常低级别的调试,事情通常我不会需要在日志中看到,除非有一些非常模糊或不寻常的问题。
  • DEBUG:仅供开发人员使用的记录 - 变量内容,比较结果以及帮助调试业务逻辑的其他信息位。

  • 信息:诸如任务X的高级信息现在已经完成或者某个规则得到满足,这就是我要接下来要做的事,因为这个规则。

  • WARN:可能有问题,但对业务逻辑的流程没有任何实际的伤害。例如,也许某个变量有时会变为空,但我们不一定需要它,或者我们可以以某种方式解决它。同时,我们仍然想知道这件事情,以防万一我们以后告诉我们需要找到它的例子或更仔细地调查它为什么发生。

  • 错误:一个严重的问题,肯定需要进一步调查,但不够严重,不足以阻止应用程序完成手头的任务。

  • 致命的:一个非常严重的意外问题,我们无法解决或恢复,甚至可能阻止应用程序做一些有用的事情。