nlog 通过记录器名称设置全局属性
Posted
技术标签:
【中文标题】nlog 通过记录器名称设置全局属性【英文标题】:nlog set global property by logger name 【发布时间】:2021-12-21 12:26:47 【问题描述】:我想实例化一个记录器实例一次并为其设置一些属性,这些属性可以在我获得该名称的记录器时在任何地方使用,这是否可行以及如何执行?
例子-
Logger logger = LogManager.GetLogger("MyLogger");
我想为此记录器设置一些属性,用于我的计划作业,作业名称为 -
logger.Property = job.Name;
Job.cs
public class Job
Logger logger = LogManager.GetLogger("MyLogger");
logger.Property = job.Name;
//Call worker
worker.Process();
Worker.cs
public class worker
Logger logger = LogManager.GetLogger("MyLogger");
public static Process()
logger.Error("Test");
我想在工作人员中记录作业名称,实现此目的的最佳方法是什么?我想将此扩展到工作或工作人员的任何进一步调用。
【问题讨论】:
【参考方案1】:您可以考虑在任何地方使用相同的 Logger-instance,并使用WithProperty:
public static class MyLogger
public static Logger Instance = NLog.LogManager.GetLogger("MyLogger").WithProperty("Hello", World");
public class Job
Logger logger = MyLogger.Instance;
logger.Property = job.Name;
//Call worker
worker.Process();
您可以考虑使用MDLC(任务范围属性)或GDC(全局范围属性)
另见:https://github.com/NLog/NLog/wiki/Context
【讨论】:
以上是关于nlog 通过记录器名称设置全局属性的主要内容,如果未能解决你的问题,请参考以下文章
使用 NLog 在 ASP.NET Web API 2.1 中进行全局异常处理?