编辑 4:“From”似乎是 NLog 中的保留字。更改它“FromID”有效。这是一种将变量传递给 NLog 并保持代码干净的好方法!!!!谢谢迈克!!!
编辑3.我真的很喜欢这个主意:
按照迈克的建议实现了一个辅助类:
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);
}
问题是我必须格式化调用的字符串(但性能巨大)......但这看起来像是一个黑客?
理想情况下,我会在自定义布局渲染器中声明属性,而不是在配置文件中设置这些属性,我的类的每个实例都会设置属性...类似于[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/Extending%20NLog显示了如何添加属性,但我不知道如何调用它们。
Also, https://github.com/NLog/NLog/wiki/Event-Context-Layout-Renderer https://github.com/NLog/NLog/wiki/Event-Context-Layout-Renderer显示了如何设置自定义属性,但这涉及到每次我想要记录某些内容时创建 LogEventInfo 对象。
Nlog 自定义布局渲染器 https://stackoverflow.com/questions/5951102/nlog-custom-layoutrenderer再次展示如何自定义输出......而不是如何自定义输入。
这是针对使用 VS2013 的面向 .NET 4.0 的 C# 控制台应用程序
谢谢
-埃德