在生产环境中记录/跟踪的内容

时间:2009-10-28 10:17:20

标签: .net language-agnostic logging

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

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

3 个答案:

答案 0 :(得分:4)

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

我的格式是这样的:

方法录入:

- > MyMethod(1,“arg1”)

方法退出:

< -MyMethod(1,“arg1”)= true

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

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

不要错误地记录没有足够的信息,因为你担心性能损失 - 测量这个以便你对开销感到满意,但是相信你已经足够记录以完全根据信息来诊断故障在日志中。您不想要做的是在客户报告故障后将登录更改为更多详细信息,然后希望再次发生故障。

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

答案 1 :(得分:2)

这真的取决于你,没有硬&快速规则。

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

我们的调试日志记录几乎涉及到每个函数的开始和放大结束时,每次成功的未成功交易都被记录为“信息”,在异常中记录“错误”&同样。

一旦我们在一个月左右的时间内将应用程序移到生产环境中,我们就会通过.properties文件关闭所有调试日志,而无需重新启动应用程序&我们很高兴。

答案 2 :(得分:0)

我喜欢使用不同的关卡。最不详细的显示启动和关闭 服务以及错误和例外。最详细的可能就是这样 显示每个局部变量的值,函数入口/出口等。

您可以轻松获得的细节越多,挖掘越少,您的可能性越小 必须跳上飞机去问题所在。 。 。

ķ