gpt4 book ai didi

c# - ILogger 访问函数 Log(LogLevel logLevel

转载 作者:行者123 更新时间:2023-12-04 17:24:29 27 4
gpt4 key购买 nike

我正在 .Net Core 3.1 中实现自定义 ILogger。该类需要实现以下契约

public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter) 

我正在触发 LogDebug 函数并传递一个元组(键、值)参数列表,如下所示:

logger.LogDebug("MyDebugMessage", ("arg1Key", "arg2Value"), ("arg2Key", "arg2Value"), ("arg3Key", "arg3Value"));

ILogger Log 函数被触发,第一个参数消息“MyDebugMessage”被传递到状态参数中。但是,ILogger 函数中的参数列表没有变量。如何访问参数列表?

最佳答案

到目前为止,我发现唯一的方法是使用反射来获取 TState 状态的 _values 私有(private)成员。

  public class ApiLogger : ILogger
{
// more code

public async void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
{

FieldInfo[] fieldsInfo = state.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
FieldInfo props = fieldsInfo.FirstOrDefault(o => o.Name == "_values");
object[] values = (object[])props?.GetValue(state);

// more code
}

// more code
}

关于c# - ILogger 访问函数 Log<TState>(LogLevel logLevel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64211201/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com