我是NLog的新手,我一直在玩LogEventInfo对象,因为我认为我的应用程序中需要它们。我使用纯文本字符串创建了一个LogEventInfo对象,然后使用设置为写入$ {message}的FileAppender调用了Logger.Debug(myEventInfoObject)。在我希望看到我的文本字符串的地方,我看到了记录器名称,消息级别,消息和序列ID。我发现扩展字符串是我调用myEventInfoObject.ToString()时得到的。如何控制$ {message}来自LogEventInfo对象时出现的内容?
这是我的配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
throwExceptions="true">
<targets>
<target name="file" xsi:type="File" layout="${longdate} ${logger} ${message}" fileName="${basedir}/nlog_sample_file.txt" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="file" />
</rules>
</nlog>
这是我生成日志的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NLog;
namespace NLogSample
{
class Program
{
static void Main(string[] args)
{
try
{
Logger logger = LogManager.GetCurrentClassLogger();
LogEventInfo theEvent = new LogEventInfo(LogLevel.Debug, "", "This message from the LogInfoEvent will not be used.");
theEvent.Properties["Message"] = "This message from the LogInfoEvent Message property will be used.";
logger.Debug(theEvent);
logger.Debug("Does the sequence ID show up in this message?");
string formattedMessage = theEvent.FormattedMessage;
string eventString = theEvent.ToString();
}
catch (Exception ex)
{
int a = 1;
}
}
}
}
最后,这是一个消息示例:
2014-10-08 10:14:13.5525 NLogSample.Program日志事件:记录器=&#39;&#39; Level = Debug Message =&#39;不会使用来自LogInfoEvent的此消息。&#39; SequenceID = 2
我在Win7 Pro计算机上使用Visual Studio 2012。
非常感谢!
ROBR
答案 0 :(得分:1)
我必须这样做
class MyLogEventInfo : LogEventInfo {
public override string ToString() {
return base.FormattedMessage;
}
}
...
var theEvent = new MyLogEventInfo();
theEvent.Message = "This message from the LogInfoEvent will not be used.";
logger.Debug(theEvent);
答案 1 :(得分:0)
如果您要创建LogEventInfo
个对象并使用自己的信息填充它们,则应使用Logger.Log
方法签名之一,而不是Logger.Info/Logger.Debug/etc
方法签名。
您现在看到的行为可能是因为Logger.Debug
方法正在接收一个对象(恰好是LogEventInfo
个对象)并且在记录它之前正在调用ToString
答案 2 :(得分:0)
@wageoghe是对的。以下是我如何使用它:
// Create the logger
Logger logger = LogManager.GetCurrentClassLogger();
// Create the LogEventInfo object
LogEventInfo logEvent = new LogEventInfo();
// Now add the event characteristics
logEvent.Properties["EventCode"] = eventId;
logEvent.Level = level;
logEvent.Message = message;
logEvent.Exception = ex;
// Actually write the log entry.
logger.Log(logEvent);
无需使用包装器日志对象,只需使用LogEventInfo()
中的Level属性定义LogLevel,然后将该对象传递给Log()
。