gpt4 book ai didi

c# - NLog - 如何以编程方式获取调用者类名和方法?

转载 作者:行者123 更新时间:2023-12-01 19:54:51 27 4
gpt4 key购买 nike

我正在使用这个https://github.com/NLog/NLog/tree/master/examples/ExtendingLoggers/LoggerWrapper扩展 NLog 的方法,以便我可以向我的事件添加自定义属性。所以我的代码如下所示:

    public void WriteMessage(string eventID, string message)
{
LogEventInfo logEvent = new LogEventInfo(LogLevel.Info, _logger.Name, message);

logEvent.Properties["EventID"] = eventID;

_logger.Log(typeof(MyLogger), logEvent);
}

WriteMessage 方法中,我尝试获取调用者类和方法名称,如下所示:

logEvent.CallerClassName;
logEvent.CallerMemberName;

但都返回 null。

如何获取这些值?

最佳答案

就像您可以分配LogEventInfo.Exception一样,您也可以分配LogEventInfo.CallerClassName(或LogEventInfo.CallerMemberName)。

调用LogEventInfo.Exception的getter只会返回一个异常对象(如果已分配)。 LogEventInfo.CallerClassName(或LogEventInfo.CallerMemberName)也是如此。

NLog Logger 负责捕获调用点。 Logger 在接收到 LogEventInfo 时执行捕获。捕获的成本非常高,并且仅当目标已配置为使用调用站点时才会发生。

而不是尝试自己遍历 StackTrace。那么您可能想利用调用者信息:https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/caller-information

NLog v5 引入了新的 fluent-Logger-API ,以最小的开销捕获源文件 + 行号 + 类名,以便与 ${callsite:captureStackTrace=false} 一起使用。 :

_logger.ForInfoEvent()
.Message("This is a fluent message {0}", "test")
.Property("PropertyName", "PropertyValue")
.Log();

关于c# - NLog - 如何以编程方式获取调用者类名和方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51845420/

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