我已经将NLog添加到我的ASP.Net Core项目中,我即将在各处添加日志记录,但在此之前,我想获得一些关于我应该在各个日志级别记录什么的建议(特别是调试和信息)。
我会有一个记录器每类。
在我的控制器中,我认为有一个日志是有意义的。Debug()行,包含所有参数的详细信息和操作结束时的结果(这两者都可以通过actionFilter实现)。
那么,我应该在信息级别记录什么呢?(假设调试级别将关闭,直到我需要调试问题为止)。
我是否应该只记录调用该操作,如果成功,可能在方法末尾添加一个log.info(),而不记录任何参数或结果?
控制器调用的所有方法呢?我想至少在调试级别记录这些方法的输入和输出,所以把它们放在这些方法中,而不是放在方法之外(即在方法之前和之后)可能是有意义的吗?(我看到PostSharp Diagnostics可能非常适合这个,以前从未使用过)。
在这些方法中,在开始和结束时也在信息级别进行日志记录是常见的吗?同样,这只是记录它被调用的情况和第二个log.info()来指示它成功完成了吗?还是信息的细节太多了?
建议的审计方法是什么?(可能相当客观)。最合适的日志记录级别可能是信息,但它会与更基本的信息日志记录混合在一起。如何合理地将两者分开(即,两者都记录在同一日志级别,但在日志中保持分离)。我看到NLog有过滤日志的能力,所以我想我可以在每个与审计相关的log.info()前面加上"审计",但这似乎有点脏。
当然这是基于意见的,但我遵循以下规则:
- 信息级别始终处于启用状态,因此记录重要事件,如"发送邮件"、"登录用户"。如果"登录用户"对您的系统不重要,那么我会将其作为调试记录
- 调试级别仅用于调试问题。在这个级别上,每个方法最多会有一条消息。例如"准备邮件至foo@bar"、"检查图像邮件"等
- 跟踪级别将包含性能测试和/或获取所有详细信息的详细信息。例如,方法名称和所有参数
在的开始和结束时,是否也在这些方法的信息级别进行日志记录
在我看来,仅在跟踪级别。
对于其他三个级别,我们有以下规则:
- 警告:异常/错误,但继续应用程序
- 错误:异常/错误,但没有继续应用程序
- 致命:写入错误日志时出错,需要手动干预的操作
建议的审计方法是什么?(可能相当客观)。最合适的日志记录级别可能是信息,但它会与更基本的信息日志记录混合在一起。如何合理地将两者分开(即,两者都记录在同一日志级别,但在日志中保持分离)。
创建一个单独的记录器和规则。例如
var auditingLogger = LogManager.GetLogger("auditing");
配置:
<logger name="auditing" minlevel="Info" writeTo="auditing-file" />