在某些情况下,我想在消息中添加上下文信息(例如当前已验证的用户),而不必将其包含在消息模板中。
我想做到这一点:
logger.Information("Doing stuff {Foo} with the thing {Bar}. {User}", foo, bar, user)
Run Code Online (Sandbox Code Playgroud)
但{User}模板中没有。
我已经知道了,LogContext但是将上下文信息添加到一个事件中似乎太过分了。
我也知道我可以使用低级API logger.Write(LogEvent evnt)来实际控制包括哪些属性,但是对于我要完成的工作来说似乎有点过多的代码。
我很确定有一种简短而优雅的方法非常明显,但是我还没有找到它:)
更新:
之后我才发现这个问题或多或少是相似的:向Serilog添加自定义属性
Jos*_*osh 15
如果您使用通用的 Microsoft ILogger,则可以使用 BeginScope;
using (_logger.BeginScope(new Dictionary<string, object> { { "LogEventType", logEventType }, { "UserName", userName } }))
{
_logger.LogInformation(message, args);
}
Run Code Online (Sandbox Code Playgroud)
这是在这里讨论的;https://blog.rsuter.com/logging-with-ilogger-recommendations-and-best-practices/
我可以自己弄清楚!
您可以.ForContext(propertyName, propertyValue)在一次调用其中一种方法时使用fluent .LogXXX()方法。
例如 :
logger.ForContext("User", user)
.Information("Doing stuff {Foo} with the thing {Bar}", foo, bar)
Run Code Online (Sandbox Code Playgroud)
添加到事件的属性仅适用于事件,并且在下次调用该logger.LogXXX()方法时不再存在
更新
Nicholas Blumhardt的文章对此进行了很好的解释:上下文和关联 -.NET中的结构化日志记录概念(5)
| 归档时间: |
|
| 查看次数: |
1183 次 |
| 最近记录: |