日志记录 - 调试与信息 - 每个级别包含的内容
Logging - Debug vs Info - What to include at each level
我已经将 NLog 添加到我的 ASP.Net 核心项目中,我准备在所有地方添加日志记录,但在我这样做之前,我想就我应该在各种日志中记录什么获得一些建议级别(特别是调试和信息)。
每个 class 我将有 1 个记录器。
在我的控制器中,我认为在每个动作的开头和结尾都有一个 log.Debug() 行是有意义的,在结尾处包含所有参数和结果的详细信息动作(两者都可以通过 actionFilter 实现)。
那么我应该在信息级别记录什么? (假设在我需要调试问题之前调试级别将关闭)。
我是否应该只记录操作被调用,如果调用成功,可能在方法末尾添加一个 log.info(),而不记录任何参数或结果?
控制器调用的所有方法呢?
我想至少在调试级别记录它们的输入和输出,所以将它们放在这些方法中而不是方法之外(即在它之前和之后)可能有意义吗? (我已经看到 PostSharp Diagnostics 可能非常适合这个 - 以前从未使用过)。
在这些方法中的开始和结束时也记录信息级别是否很常见,再一次,它是否只是记录它被调用,第二个 log.info() 表明它是成功完成,还是信息太多?
推荐的审计方法是什么?(可能相当 objective)。
最合适的日志记录级别可能是信息,但它会与您的更基本的信息日志记录混合在一起。
您将如何明智地将两者分开(即两者都记录在同一日志级别,但在日志中保持分开)。
我看到 NLog 具有过滤日志的能力,所以我想我可以将 "Audit" 放在每个与审计有关的 log.info() 的前面,但这似乎有点脏。
当然这是基于意见,但我遵循以下规则:
- 信息级别始终处于启用状态,因此请记录 "send a mail"、"login user" 等重要事件。如果 "login user" 对您的系统不重要,那么我会将其记录为调试。
- 调试级别仅用于调试问题。在此级别上,每个方法最多有一条消息。例如。 "prepare mail to foo@bar"、"check images mail" 等
- 跟踪级别将包含性能测试的详细信息and/or 获取所有详细信息。因此,例如方法名称和所有参数。
Is it common to also log at the info level within these methods at the start and end,
我认为仅在跟踪级别。
对于其他三个级别,我们有以下规则:
- 警告:exceptions/errors但继续申请
- 错误:exceptions/errors 但没有继续应用程序
- 致命:写入错误日志时出现错误,需要手动干预的操作。
What's the recommended approach regarding auditing?(Probably quite objective). The most appropriate logging level is probably info, but then it will get mixed in with your far more basic info logging. How would you sensibly separate the two (i.e. both logged at the same log level, but kept separate in the logs).
创建一个单独的记录器和规则。例如
var auditingLogger = LogManager.GetLogger("auditing");
配置:
<logger name="auditing" minlevel="Info" writeTo="auditing-file" />
我已经将 NLog 添加到我的 ASP.Net 核心项目中,我准备在所有地方添加日志记录,但在我这样做之前,我想就我应该在各种日志中记录什么获得一些建议级别(特别是调试和信息)。
每个 class 我将有 1 个记录器。
在我的控制器中,我认为在每个动作的开头和结尾都有一个 log.Debug() 行是有意义的,在结尾处包含所有参数和结果的详细信息动作(两者都可以通过 actionFilter 实现)。
那么我应该在信息级别记录什么? (假设在我需要调试问题之前调试级别将关闭)。
我是否应该只记录操作被调用,如果调用成功,可能在方法末尾添加一个 log.info(),而不记录任何参数或结果?
控制器调用的所有方法呢? 我想至少在调试级别记录它们的输入和输出,所以将它们放在这些方法中而不是方法之外(即在它之前和之后)可能有意义吗? (我已经看到 PostSharp Diagnostics 可能非常适合这个 - 以前从未使用过)。
在这些方法中的开始和结束时也记录信息级别是否很常见,再一次,它是否只是记录它被调用,第二个 log.info() 表明它是成功完成,还是信息太多?
推荐的审计方法是什么?(可能相当 objective)。 最合适的日志记录级别可能是信息,但它会与您的更基本的信息日志记录混合在一起。 您将如何明智地将两者分开(即两者都记录在同一日志级别,但在日志中保持分开)。 我看到 NLog 具有过滤日志的能力,所以我想我可以将 "Audit" 放在每个与审计有关的 log.info() 的前面,但这似乎有点脏。
当然这是基于意见,但我遵循以下规则:
- 信息级别始终处于启用状态,因此请记录 "send a mail"、"login user" 等重要事件。如果 "login user" 对您的系统不重要,那么我会将其记录为调试。
- 调试级别仅用于调试问题。在此级别上,每个方法最多有一条消息。例如。 "prepare mail to foo@bar"、"check images mail" 等
- 跟踪级别将包含性能测试的详细信息and/or 获取所有详细信息。因此,例如方法名称和所有参数。
Is it common to also log at the info level within these methods at the start and end,
我认为仅在跟踪级别。
对于其他三个级别,我们有以下规则:
- 警告:exceptions/errors但继续申请
- 错误:exceptions/errors 但没有继续应用程序
- 致命:写入错误日志时出现错误,需要手动干预的操作。
What's the recommended approach regarding auditing?(Probably quite objective). The most appropriate logging level is probably info, but then it will get mixed in with your far more basic info logging. How would you sensibly separate the two (i.e. both logged at the same log level, but kept separate in the logs).
创建一个单独的记录器和规则。例如
var auditingLogger = LogManager.GetLogger("auditing");
配置:
<logger name="auditing" minlevel="Info" writeTo="auditing-file" />