【问题标题】:What to log/trace in a Production environment在生产环境中记录/跟踪什么
【发布时间】:2009-10-28 10:17:20
【问题描述】:

我想知道应用程序移入生产环境后应该将哪些信息记录到文件中?除了记录异常和错误...

是否应该记录每个方法的开始和结束?正在运行的服务的开始和结束?每次应用程序将数据保存到数据库或调用外部服务时?我正在尝试在记录/跟踪所有内容与仅记录错误之间找到平衡。

【问题讨论】:

标签: .net language-agnostic logging


【解决方案1】:

在生产环境中,默认情况下我将日志记录设置为“INFO”(使用 log4net),并且在此级别上,我记录了足够的信息,以便很有可能诊断出任何错误。那么什么是“足够”的信息呢?好吧,这一切都取决于您的系统。在我们的系统中,我记录了最重要方法的入口和出口点,包括它们的输入参数和返回值(除非这是大量数据)。我愿意接受 5-10% 的日志记录开销(但你应该衡量一下)。

我的首选格式是这样的:

方法入口:

->MyMethod(1, "arg1")

方法退出:

箭头表示我可以很容易地看出这是进入还是退出。通过包含参数和返回值,我可以获得用于诊断错误的最关键数据。我的方法只有一个返回点,因此我不必担心日志记录的多个退出点。

通过记录方法进入/退出,我发现我不需要记录太多其他内容——如果您的代码被正确分解为方法,那么这将记录通过您的应用程序的执行流程。

不要因为担心性能下降而犯下没有记录足够信息的错误 - 衡量这一点以便您对开销感到满意,但确信您记录的足够多,可以完全根据以下信息诊断故障在日志中。您不希望在您的客户报告故障后将登录切换到更多详细信息,然后希望故障再次发生。

我还使用了一个 DEBUG 日志级别,它几乎可以记录所有内容。这仅在开发/测试中使用,或者可能在生产中使用,但仅在与客户协商后使用。

【讨论】:

  • 顺便说一句,您应该阅读 AOP - 它会使方法调用之前和之后的日志记录变得微不足道。此外,它可以消除大量重复和 SISO 的限制。
  • 当然,这可以通过 AOP 完成,但我有充分的理由不使用 AOP,这就是我使用我描述的技术的原因。
【解决方案2】:

这真的取决于你,没有硬性规定。

几个月前,我们正在开发这个 Java 应用程序并使用 log4j 进行日志记录,在 log4j 中,我们能够在代码中将我们的日志定义为调试、警告、错误、信息等。

我们的调试日志几乎记录在每个函数的开始和结束上,每个成功但不成功的事务都被记录为“信息”,异常中的“错误”也被记录下来等等。

大约一个月后,我们将应用程序移至生产环境后,我们通过 .properties 文件关闭了所有调试日志记录,而无需重新启动应用程序,一切顺利。

【讨论】:

  • 这是一个错字“切换”吗?关了?
【解决方案3】:

我喜欢使用不同的关卡。最不详细的显示启动和关闭 服务以及错误和异常。最详细的可以到 显示每个局部变量的值、函数的进入/退出等等。

您可以轻松获得的详细信息越少,挖掘的可能性就越小 必须跳上飞机才能去问题所在。 . . .

K

【讨论】:

    猜你喜欢
    • 2012-03-05
    • 2012-07-25
    • 2011-02-04
    • 2012-05-03
    • 1970-01-01
    • 2019-07-21
    • 2021-09-27
    • 2014-07-27
    • 1970-01-01
    相关资源
    最近更新 更多