5

如何使用 NLog 记录调用方法及其传入参数?如果不可能:我可以将一些参数传递给记录器,以便它们出现在最终的日志消息中吗?

4

2 回答 2

1

NLog 允许您使用 LogEvent 捕获其他上下文:

Logger logger = LogManager.GetCurrentClassLogger();
LogEventInfo theEvent = new LogEventInfo(LogLevel.Debug, null, "Pass my custom value");
theEvent.Properties["MyValue"] = "My custom string";
theEvent.Properties["MyDateTimeValue"] = new DateTime(2015, 08, 30, 11, 26, 50);
theEvent.Properties["MyDateTimeValueWithCulture"] = new DateTime(2015, 08, 30, 11, 26, 50);
theEvent.Properties["MyDateTimeValueWithCultureAndFormat"] = new DateTime(2015, 08, 30, 11, 26, 50);
logger.Log(theEvent);

然后可以使用提取${all-event-properties}

另请参阅:https ://github.com/NLog/NLog/wiki/EventProperties-Layout-Renderer

另请参阅:https ://github.com/NLog/NLog/wiki/All-Event-Properties-Layout-Renderer

[System.Runtime.CompilerServices.CallerMemberName] methodName您可以通过使用as 参数创建自己的日志方法来自动捕获方法名称。另请参阅:https ://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.callermembernameattribute

如果使用LogManager.GetCurrentClassLogger()获取类的记录器,那么您可以使用${logger}呈现类名。

于 2019-11-05T19:12:09.473 回答
0

解决此问题的一种方法 - 在 NLog 记录器类下创建自定义包装器,这将需要额外的参数,如 className 和 methodName。之后自己构建消息。您也可以使用它:

于 2013-12-18T04:27:13.600 回答