【发布时间】:2015-07-08 15:43:57
【问题描述】:
我有一个项目要同时测试八台相同的设备。我需要能够为每台设备写入日志。我还需要另一个包含系统日志消息的日志文件。过去我已经编写了自己的日志记录,但想尝试 Nlog。我写了一个简单的测试,看看这是否可行,但我没有取得太大的成功。我想做的是让TempObject 的每个实例都登录到它自己的文件中。目前以下代码会登录到每个日志文件中:
NLog.Config
<?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">
<targets>
<target name="logfile" xsi:type="File" fileName="logfile.txt" />
<target name="myObj1" xsi:type="File" fileName="myObj1.txt" />
<target name="myObj2" xsi:type="File" fileName="myObj2.txt" />
<target name="myObj3" xsi:type="File" fileName="myObj3.txt" />
<target name="myObj4" xsi:type="File" fileName="myObj4.txt" />
<target name="console" xsi:type="Console" />
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="logfile" />
<logger name="*" minlevel="Info" writeTo="myObj1" />
<logger name="*" minlevel="Info" writeTo="myObj2" />
<logger name="*" minlevel="Info" writeTo="myObj3" />
<logger name="*" minlevel="Info" writeTo="myObj4" />
<logger name="*" minlevel="Info" writeTo="console" />
</rules>
</nlog>
MainWindow.xaml.cs
public partial class MainWindow : Window
{
private static Logger logger = LogManager.GetCurrentClassLogger();
private TempObject myObj1 = new TempObject(1);
private TempObject myObj2 = new TempObject(2);
private TempObject myObj3 = new TempObject(3);
private TempObject myObj4 = new TempObject(4);
public MainWindow()
{
InitializeComponent();
logger.Info("this is the first log message");
myObj1.LogMessage();
myObj2.LogMessage();
myObj3.LogMessage();
myObj4.LogMessage();
SetUpDisplay();
}
}
TempObject.cs
public class TempObject
{
private int myUUT;
private static Logger logger = LogManager.GetCurrentClassLogger();
public TempObject(int uutNumber)
{
myUUT = uutNumber;
}
public void LogMessage()
{
logger.Info("UUT" + myUUT);
}
}
【问题讨论】:
-
您能否澄清一下 - 使用您提供的当前代码,所有实例都登录到同一个日志文件中。
-
当前对于每个 TempObject 实例调用 logger.Info("UUT" + myUUT);将登录到以下每个日志文件:logfile、myObj1、myObj2、myObj3 myObj4。我希望 TempObject 的 myObj1 实例仅登录到 myObj1 日志文件,TempObject 的 myObj2 实例仅登录到 myObj2 日志文件,TempObject 的 myObj3 实例仅登录到 myObj3 日志文件,TempObject 的 myObj4 实例仅登录到 myObj4 日志文件.
-
嗯。由于 Nlog 仅在配置中正确设置文件名,因此这可能很乏味。您可以在更改目标后使用 Nlog 的 ReconfigExistingLoggers,但是每次有日志语句时都必须调用它(但这是在运行时出于错误原因操作配置文件)