2011-09-20 64 views
12

这可能是一个纯粹主观的问题(如果没有组织试图将其标准化),但我的团队在这方面比您想象的更努力。Commons日志记录优先最佳实践

我们使用Apache Commons Logging作为我们的日志记录界面,而且我们的开发团队通常使用优先级不一致。例如,有些开发人员将任何捕获的异常记录为致命(log.fatal(message)),即使流程能够处理错误,而其他人员只有在某些事件导致程序因某种原因必须停止执行时才会致命。

我想知道其他团队如何定义每个优先级。有没有人在明确试图为此定义最佳实践的公司工作?雅加达对此有所权衡吗?

我的目标是向我的整个团队发送每个优先级的简单建议,以便我们能够以一致的方式更有效地处理难以处理的应用程序日志记录。

+0

我在这里真正想找的是一个普遍接受的最佳实践指南,可以跨组织使用。一个可靠的网络资源将是伟大的。 – smp7d

+0

我认为你有三个大致相同的答案这一事实表明这**是**普遍接受的最佳做法?我认为你可能会为你的团队寻找100%的“论证证明”,但也许这里的意见分量可能足够了? – Brian

+0

好点。在我的组织内部可能有足够的意见,但是我想知道各个组织是否有建议的标准。我们使用的许多软件包都使用公共日志记录,并且很高兴知道它们应该与某些建议保持一致。这可能太多问,也许这就是为什么我没有在任何地方找到它。 – smp7d

回答

9

下面是我们用什么(我会说一些其他的方面):

  • FATAL:错误危及系统的一致性,并可能要求立即关闭/重新启动 - 很少用手动
  • 错误:不应抛出的异常,并且表示系统中的错误(通常不会被捕获到某个点的所有异常)
  • WARN:可能发生但可能会导致逻辑/使用错误 - 我们决定是否跟踪这些错误
  • 信息:无论你需要在日志中有什么,例如用户目前正在做什么(在我们的Web应用程序中:用户正在浏览的页面等)
  • 调试:仅调试消息,如时间等,通常在日志中关闭
  • TRACE:我们不使用这一点,你可以用它来更具体的调试信息

在某些情况下,我们用日志消息的错误开始,为了得到通知时,一些我们通常不喜欢发生的发生。稍后,如果我们确定无法删除该错误的来源,我们会处理它并将日志级别更改为WARN。

请注意,我们的测试和生产系统设置为发送致命和错误的电子邮件。因此,我们不必手动检查这些日志文件,但只需检查一个电子邮件收件箱。

希望有所帮助。

编辑:你已经看到了Apache Commons Logging best pratices

+0

是的,那个链接是我需要的。我无法相信我没有发现我自己......谢谢。对于任何有兴趣的人,请查看该链接中的“消息优先级/级别”。 – smp7d

6

我一直以此为指导;我使用Log4j比Commons Logging更多,但这可能仍然有帮助:

DEBUG - 用于真正的调试级别信息;将不会在生产或运输产品中看到,因为INFO将是最低级别;捕获时间的好,事件的发生次数等。

信息 - 生产/出货使用的最低水平;记录可能对法医调查有用的数据并确认成功的结果(“在DB中保存999项”);这里所有的信息必须是这样的,你会与最终用户/客户看到它,并发送你就OK,如果需要的话

WARN(没有秘密,没有亵渎!) - 不是一个错误水平等,但有助于了解系统可能进入狡猾的领域,例如业务逻辑的东西,如“订购产品数量< 0”,这表明某处存在缺陷,但不是系统异常;我倾向于不使用它那么多,说实话,找东西更趋于自然拟合到INFO或ERROR

错误 - 用这个异常(除非有一个很好的理由,以减少WARN或者INFO);记录完整的堆栈跟踪以及重要的变量值,但不能诊断;只能使用应用程序/系统错误,不坏的业务逻辑的情况下

FATAL - 仅使用这么高的严重性的错误,它确实可以防止应用程序无法启动/继续

另外 - 检查你的日志通常,在DEBUG和INFO级别都处于活动状态的情况下,您希望能够遵循一个好的叙述,并且容易找到突出的事件,并确保您没有做任何过于冗长的事情,从而降低可读性。

此外,请确保您使用的模式能够为时间戳,源代码类和严重程度等方面带来整齐的列 - 同样,它可以大量提高可读性。

+0

那么说。你有没有使用TRACE? – cherouvim

+0

我没有,但只是因为我使用log4j没有跟踪级别;否则我认为这将是非常有用的 – Brian

+2

TRACE确实存在。 http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Level.html#TRACE – cherouvim

2

我采取

  • 致命:该程序是在不能被处理,并且必须被终止(自动地或由用户)的状态。
  • 错误:程序的操作失败,用户可检测到(更改未保存/文件无法读取),但程序仍然可以工作(尝试加载另一个文件)。
  • 警告:有些东西没有按计划进行,但用户没有注意到它(服务器没有应答ping;可能需要该服务器时会导致错误/致命)
  • 信息:用户操作/主要程序动作(文件加载,自动备份存储)。
  • 调试:跟踪信息。哪一部分的程序正在运行,这是参数的值
1

这是我公司建议:

TRACE - 消息在开发过程中可能唯一有用的,并可能产生太多经常适用于生产。例如,如果我在内部循环中记录了 中间值,我会使用TRACE。

调试 - 消息用于记录服务器正常运行中的各个步骤。通常这些将针对开发人员而不是操作人员。

INFO - 我们期望在生产环境中记录的积极或中性性质的消息。应该对操作人员有意义。

警告 - 消息指示可能危及服务器以准确和及时的方式响应请求的能力的情况。

错误 - 指示意外行为或状况的消息。

致命 - 消息指示意外的行为或状况,导致应用程序进程继续运行变得不可能或危险。

我们预计生产中的日志将被设置为INFO,并且我们期望它们被开发人员以外的人阅读。日志消息的风格是一个整体的其他谈话...

0

我用一个简单的方法:

  • DEBUG:在生产熄灭,因此主要使用由开发商来登录某些查询,时序,参数值等

  • 信息:登录的一切,让你知道现在回想起来一切解释如何您的结果进行计算,并且使您可以修复bug

  • 错误:一切都需要某人(开发者/操作)注意

我不使用WARN,因为没有人曾经滤波器WARN消息的所有日志文件。如果它很重要,那么它是错误的(并且有人必须关心它),如果不是的话,它是INFO(并且没有人对它感兴趣直到有问题)。 FATAL相同。我也不使用TRACE。我在开发过程中需要了解的一切都是DEBUG。

1

如果您正在寻找简单建议,行业支持,为什么不看看行业简单的实施/文档?

我们使用logback/log4j API作为logging level guide =>这使得它简单/记录/被业界支持:

  • 级别ALL具有最低的等级,旨在开启所有记录。

  • 等级DEBUG指定对于调试应用程序最有用的细粒度信息事件。

  • 级别错误指示可能仍允许应用程序继续运行的错误事件。

  • 等级致命错误表示非常严重的错误事件,可能导致应用程序中止。

  • 等级信息指定以粗粒度级别突出显示应用程序进度的信息性消息。

  • 级别关闭具有最高可能排名,旨在关闭日志记录。

  • 级别TRACE指定细粒度信息事件比DEBUG

  • 级别WARN表示可能有害的情况。