首页 > 解决方案 > nlog 通过记录器名称设置全局属性

问题描述

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

例子 -

Logger logger = LogManager.GetLogger("MyLogger");

我想为此记录器设置一些属性,以使用作业名称为我的计划作业 -

logger.Property = job.Name;

作业.cs

public class Job{
Logger logger = LogManager.GetLogger("MyLogger");
logger.Property = job.Name;

//Call worker 
worker.Process();
}

工人.cs

public class worker{
Logger logger = LogManager.GetLogger("MyLogger");
public static Process(){
 logger.Error("Test");
 }
}

我想在工作人员中记录作业名称,实现此目的的最佳方法是什么?我想将此扩展到工作或工人的任何进一步呼叫。

标签: c#nlog

解决方案


您可以考虑在任何地方使用相同的 Logger 实例,并使用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


推荐阅读