【发布时间】:2015-09-29 23:55:53
【问题描述】:
编辑 4:“From”似乎是 NLog 中的保留字。更改它“FromID”有效。这是将变量传递给 NLog 并且仍然保持代码干净的好方法!!!!谢谢迈克!!!
编辑 3。我真的很喜欢这个主意。:
按照 Mike 的建议实现了一个辅助类:
public class NLogHelper
{
//
// Class Properties
//
private Logger m_logger;
private Dictionary<string, object> m_properties;
//
// Constructor
//
public NLogHelper(Logger logger)
{
m_logger = logger;
m_properties = new Dictionary<string, object>();
}
//
// Setting Logger properties per instancce
//
public void Set(string key, object value)
{
m_properties.Add(key, value);
}
//
// Loggers
//
public void Debug(string format, params object[] args)
{
m_logger.Debug()
.Message(format, args)
.Properties(m_properties)
.Write();
}
在我的主要代码中,我有:
private NLogHelper m_logger;
public void Start()
{
m_logger = new NLogHelper(LogManager.GetCurrentClassLogger());
m_logger.Set("From", "QRT123"); // Class setting.
m_logger.Debug("Hello ");
}
并且配置文件中设置的目标如下:
<target xsi:type="File"
name ="LogFile" fileName="C:\QRT\Logs\QRTLog-${shortdate}.log"
layout ="${date}|${level}|${event-properties:item=From}|${message} "/>
但是输出有一个空白代替'from'属性???
所以我快到了……但它似乎不起作用??
编辑 2: 我现在正在尝试创建自己的 NLog 调用版本:
private void Log_Debug (string Message)
{
LogEventInfo theEvent = new LogEventInfo(LogLevel.Debug, "What is this?", Message);
theEvent.Properties["EmployeeID"] = m_employeeID;
m_logger.Log(theEvent);
}
问题是我必须为调用格式化字符串(但需要很大的性能交易)......但这似乎是一个 hack??
理想情况下,我会在自定义布局渲染器中声明属性,而不是在配置文件中设置这些属性,而是为我的类的每个实例设置属性...类似于 [ID = m_ID] 的整个类。这样,每当从该类调用 NLog 时,都会设置 ID 属性,并且 NLog 的自定义布局渲染器可以使用此属性来输出它。我说得有道理吗??
我是 NLog 新手,一直在研究自定义渲染器。
基本上,我的目标是让我的日志语句是:
_logger.Debug ("My Name is {0}", "Ed", ID=87);
我希望我的渲染是这样的:
layout = ${ID} ${date} ${Level} ${Message}
就是这样。 ${ID} 可以有一个默认值 0。没问题。但理想情况下,我希望每次调用都能够指定一个 ID,而无需在每次我想记录时都有 3 行。
我已经看到自定义渲染器允许我自定义输出的内容,但我不确定如何在没有
的情况下自定义传递给它的属性https://github.com/NLog/NLog/wiki/Extending%20NLog 显示了如何添加属性,但我不知道如何调用它们。
另外,https://github.com/NLog/NLog/wiki/Event-Context-Layout-Renderer 展示了我如何设置自定义属性,但这涉及到每次我想记录某些内容时创建一个 LogEventInfo 对象。
Nlog Custom layoutrenderer 展示了如何自定义输出......再次......不是如何自定义输入。
这是针对使用 VS2013 的 .NET 4.0 的 C# 控制台应用程序
谢谢 -埃德
【问题讨论】: