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 中进行全局异常处理?

Storyboard 通过全局值访问 UIControl 属性

第六十八节,htnl全局属性和其他属性

使用 NLog 记录时修改异常数据

如何将字段名称传递给属性文件中的全局消息

Abp小知识-如何全局设置DontWrapResult属性