如何添加不属于消息模板的命名 属性?
How can I add a named property that is not part of the message template?
在某些情况下,我想将上下文信息添加到消息中(例如当前经过身份验证的用户),而不必将其包含在消息中模板.
我想完成这个:
logger.Information("Doing stuff {Foo} with the thing {Bar}. {User}", foo, bar, user)
但模板中没有 {User}
。
我已经知道 LogContext
但在仅向一个事件添加上下文信息时,这似乎有点过分了。
我也知道我可以使用低级 API logger.Write(LogEvent evnt)
来实际控制包含哪些属性,但是对于我想要完成的事情来说,这似乎有点太多代码了。
我很确定有一个非常明显的简短而优雅的方法,但我还没有找到:)
更新:
我后来才发现这个问题或多或少相似:
我可以自己解决!
您可以在一次调用 .LogXXX()
方法之一时使用流畅的方法 .ForContext(propertyName, propertyValue)
。
例如:
logger.ForContext("User", user)
.Information("Doing stuff {Foo} with the thing {Bar}", foo, bar)
添加到事件中的 属性 仅适用于该事件,并且在下次调用 logger.LogXXX()
方法时不再存在
更新
Nicholas Blumhardt 的文章解释得很好:Context and correlation – structured logging concepts in .NET (5)
如果您使用的是通用 Microsoft ILogger,则可以使用 BeginScope;
using (_logger.BeginScope(new Dictionary<string, object> { { "LogEventType", logEventType }, { "UserName", userName } }))
{
_logger.LogInformation(message, args);
}
此处讨论; https://blog.rsuter.com/logging-with-ilogger-recommendations-and-best-practices/
在某些情况下,我想将上下文信息添加到消息中(例如当前经过身份验证的用户),而不必将其包含在消息中模板.
我想完成这个:
logger.Information("Doing stuff {Foo} with the thing {Bar}. {User}", foo, bar, user)
但模板中没有 {User}
。
我已经知道 LogContext
但在仅向一个事件添加上下文信息时,这似乎有点过分了。
我也知道我可以使用低级 API logger.Write(LogEvent evnt)
来实际控制包含哪些属性,但是对于我想要完成的事情来说,这似乎有点太多代码了。
我很确定有一个非常明显的简短而优雅的方法,但我还没有找到:)
更新:
我后来才发现这个问题或多或少相似:
我可以自己解决!
您可以在一次调用 .LogXXX()
方法之一时使用流畅的方法 .ForContext(propertyName, propertyValue)
。
例如:
logger.ForContext("User", user)
.Information("Doing stuff {Foo} with the thing {Bar}", foo, bar)
添加到事件中的 属性 仅适用于该事件,并且在下次调用 logger.LogXXX()
方法时不再存在
更新
Nicholas Blumhardt 的文章解释得很好:Context and correlation – structured logging concepts in .NET (5)
如果您使用的是通用 Microsoft ILogger,则可以使用 BeginScope;
using (_logger.BeginScope(new Dictionary<string, object> { { "LogEventType", logEventType }, { "UserName", userName } }))
{
_logger.LogInformation(message, args);
}
此处讨论; https://blog.rsuter.com/logging-with-ilogger-recommendations-and-best-practices/