.NET Core 中的 NLog 事件属性
NLog EventProperties in .NET Core
我正在使用 ILogger<MyController>
通过 DI 写入日志(参见 step 6)
我想自动将 traceId 添加到我控制器中的所有日志中。
这是有效的:
logger.Info("Some log. TraceId:{traceId}", 123);
然而,我需要更改我所有的日志命令(很多!),这很痛苦。
如果我执行以下操作,则不安全:
using NLog;
public class MyController : Controller
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public MyConstructor(Apilog apilog)
{
Logger.SetProperty("traceid", apilog.TraceId);
}
}
有什么方法可以将 SetProperty 与 ILogger<MyController>
一起使用吗?
或者以某种快速且线程安全的方式将 NLog 与 SetProperty 结合使用的方法?
非常感谢!
当您在线程之间共享记录器时,您可以使用 WithProperty 来确保线程安全。
请注意,WithProperty/SetProperty 仅适用于 NLog 的 Logger
。 (所以不是 Microsoft.Extensions.Logging` 的 ILogger
)。见下文。
示例:
using NLog;
public class MyController : Controller
{
private static readonly Logger BaseLogger = LogManager.GetCurrentClassLogger();
private readonly Logger Logger; // non static because of traceid.
public MyConstructor(Apilog apilog)
{
Logger = BaseLogger.WithProperty("traceid", apilog.TraceId);
}
}
Is there some way to use SetProperty with ILogger<MyController>
?
Microsoft.Extensions.Logging的ILogger接口上没有SetProperty,但是你可以这样做:
using (_logger.BeginScope(new[] { new KeyValuePair<string, object>("traceid", apilog.TraceId) }))
{
_logger.LogDebug("Log message");
}
并在您的配置中使用:${mdlc:traceid}
。查看更多详细信息和选项 here
我正在使用 ILogger<MyController>
通过 DI 写入日志(参见 step 6)
我想自动将 traceId 添加到我控制器中的所有日志中。
这是有效的:
logger.Info("Some log. TraceId:{traceId}", 123);
然而,我需要更改我所有的日志命令(很多!),这很痛苦。
如果我执行以下操作,则不安全:
using NLog;
public class MyController : Controller
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public MyConstructor(Apilog apilog)
{
Logger.SetProperty("traceid", apilog.TraceId);
}
}
有什么方法可以将 SetProperty 与 ILogger<MyController>
一起使用吗?
或者以某种快速且线程安全的方式将 NLog 与 SetProperty 结合使用的方法?
非常感谢!
当您在线程之间共享记录器时,您可以使用 WithProperty 来确保线程安全。
请注意,WithProperty/SetProperty 仅适用于 NLog 的 Logger
。 (所以不是 Microsoft.Extensions.Logging` 的 ILogger
)。见下文。
示例:
using NLog;
public class MyController : Controller
{
private static readonly Logger BaseLogger = LogManager.GetCurrentClassLogger();
private readonly Logger Logger; // non static because of traceid.
public MyConstructor(Apilog apilog)
{
Logger = BaseLogger.WithProperty("traceid", apilog.TraceId);
}
}
Is there some way to use SetProperty with
ILogger<MyController>
?
Microsoft.Extensions.Logging的ILogger接口上没有SetProperty,但是你可以这样做:
using (_logger.BeginScope(new[] { new KeyValuePair<string, object>("traceid", apilog.TraceId) }))
{
_logger.LogDebug("Log message");
}
并在您的配置中使用:${mdlc:traceid}
。查看更多详细信息和选项 here