Ter*_*rry 6 asp.net-core ilogger
有没有办法读取/获取“当前范围”值?例如,我在 IPageFilter 中添加了一些“全局上下文”值:
// OnPageHandlerExecuting
var contextScopeValues = new Dictionary<string, object>
{
{ "UserId", "user-id-value" }
};
contextScope = logger.BeginScope( contextScopeValues );
// OnPageHandlerExecuted
contextScope?.Dispose();
Run Code Online (Sandbox Code Playgroud)
如果我logger.LogInformation( "Doing something for {UserId}" );在任何页面处理期间调用,这将起作用并且消息将使用正确的UserId.
但是,在使用 时LoggerMessage,如果没有字符串参数,它会引发解析错误。
public static class LoggerMessages
{
private static readonly Action<ILogger> sampleActivity;
static LoggerMessages()
{
// This line throw exception because a parameter was 'expected'
sampleActivity = LoggerMessage.Define( "Start some activity for {UserId}" );
}
public static void SampleActivity( this ILogger logger ) => sampleActivity( logger, null );
}
Run Code Online (Sandbox Code Playgroud)
正确实现后,它看起来像这样并传入一个字符串。
public static class LoggerMessages
{
private static readonly Action<ILogger, string> sampleActivity;
static LoggerMessages()
{
sampleActivity = LoggerMessage.Define<string>( "Start some activity for {UserId}" );
}
public static void SampleActivity( this ILogger logger, string userId ) => sampleActivity( logger, userId, null );
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我传入一个虚拟值,它将替换以后所有日志记录调用的“核心上下文”值。所以我希望能够做类似的事情logger.SampleActivity( logger.Scope[ "UserId" ] );,但它显然不存在。我是否有任何选项可用于LoggerMessage提高性能并使用“核心”UserId 属性?
| 归档时间: |
|
| 查看次数: |
2299 次 |
| 最近记录: |