nlog 通过记录器名称设置全局 属性

nlog set global property by logger name

我想实例化一个记录器实例一次并为其设置一些属性,只要我通过该名称获取记录器,就可以在任何地方使用这些属性,这可以实现吗?如何实现?

例子-

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");
 }
}

我想在 worker 中记录 Job 名称,最好的方法是什么?我想将此扩展到工作或工作人员发出的任何进一步呼叫。

可以考虑到处使用同一个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 (Task Scope Properties) or GDC(全局范围属性)

另请参阅:https://github.com/NLog/NLog/wiki/Context