编辑4:“来自”似乎是NLog中的保留字。改变它“FromID”的工作。这是一个很好的方式将变量传递给NLog,并且仍然保持您的代码清洁!感谢MIKE!可以将自定义属性传递给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/Event-Context-Layout-Renderer显示了我可以如何设置自定义属性,但每次我想记录某些内容时都会涉及创建LogEventInfo对象。
Nlog Custom layoutrenderer显示了如何自定义输出..再次...不是如何自定义输入。
这是针对.NET 4的C#中的控制台应用程序。0使用VS2013
感谢 -Ed
谢谢!我会尝试实施帮助程序,以便让我的代码可读。你认为这会影响性能吗?由于所有对辅助类的调用? –
嗨迈克:我实施了你的建议,但它似乎并没有工作?我期待新房地产在现场空白。我在“编辑3”中提供了我的代码。我确定我正确地拼写了这个属性......“不确定这里发生了什么。没有编译发布等 –
得到它的工作。 “From”似乎是一个保留字。我将它改为FromID,它工作! –