从 ILogger 范围读取状态值

问题描述

有没有办法读取/获取“当前范围”值?例如,我在 IPageFilter 中添加了一些“全局上下文”值:

// OnPageHandlerExecuting
var contextScopeValues = new Dictionary<string,object>
{
    { "UserId","user-id-value" }
};
contextScope = logger.BeginScope( contextScopeValues );

// OnPageHandlerExecuted
contextScope?.dispose();

如果我在任何页面处理期间调用 logger.Log@R_345_4045@ion( "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 );
}

正确实现,它看起来像这样并传入一个字符串。

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 );
}

但是,如果我传入一个虚拟值,它将替换所有日志调用的“核心上下文”值。所以我希望能够做类似 logger.SampleActivity( logger.Scope[ "UserId" ] ); 的事情,但它显然不存在。我是否可以选择使用 LoggerMessage 来提高性能并使用“核心”UserId 属性

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)