C# 如何使用Nlog将类的每个实例记录到不同的文件中?
我有一个项目,我在同一时间测试八件相同的设备。我需要能够为每件设备写入日志。我还需要另一个包含系统日志消息的日志文件。在过去,我写过自己的日志,但想尝试Nlog。我写了一个简单的测试,看看这是否可行,但我并没有取得多少成功。我想做的是让C# 如何使用Nlog将类的每个实例记录到不同的文件中?,c#,wpf,nlog,C#,Wpf,Nlog,我有一个项目,我在同一时间测试八件相同的设备。我需要能够为每件设备写入日志。我还需要另一个包含系统日志消息的日志文件。在过去,我写过自己的日志,但想尝试Nlog。我写了一个简单的测试,看看这是否可行,但我并没有取得多少成功。我想做的是让TempObject的每个实例都登录到自己的文件中。当前,以下代码登录到每个日志文件中: NLog.Config TempObject.cs 我必须在TempObject中更改以下内容,它可以正常工作 public class TempObject { pri
TempObject
的每个实例都登录到自己的文件中。当前,以下代码登录到每个日志文件中:
NLog.Config
TempObject.cs
我必须在TempObject中更改以下内容,它可以正常工作
public class TempObject
{
private int myUUT;
private Logger myLogger;
public TempObject(int uutNumber)
{
myUUT = uutNumber;
string logString = "myObj" + myUUT;
myLogger = LogManager.GetLogger(logString);
}
public void LogMessage(string msg)
{
myLogger.Info("UUT" + myUUT+ "|" + msg);
}
}
以及配置文件的规则部分,以:
<rules>
<logger name="*" minlevel="Info" writeTo="logfile" />
<logger name="myObj1" minlevel="Info" writeTo="myObj1" />
<logger name="myObj2" minlevel="Info" writeTo="myObj2" />
<logger name="myObj3" minlevel="Info" writeTo="myObj3" />
<logger name="myObj4" minlevel="Info" writeTo="myObj4" />
<logger name="*" minlevel="Info" writeTo="console" />
</rules>
您能澄清一下吗?使用您给出的当前代码,所有实例都会登录到同一个日志文件中。当前,对于TempObject的每个实例,调用logger.Info(“UUT”+myUUT);将登录到以下每个日志文件:日志文件、myObj1、myObj2、myObj3、myObj4。我希望TempObject的myObj1实例只登录myObj1日志文件,TempObject的myObj2实例只登录myObj2日志文件,TempObject的myObj3实例只登录myObj3日志文件,TempObject的myObj4实例只登录myObj4日志文件.hmm。由于Nlog仅在配置中正确设置文件名,因此这可能会很乏味。更改目标后,您可以使用Nlog的ReconfigeExistingLogger,但每次使用log语句时都必须调用它(但这是由于错误的原因在运行时操纵配置文件)
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);
}
}
public class TempObject
{
private int myUUT;
private Logger myLogger;
public TempObject(int uutNumber)
{
myUUT = uutNumber;
string logString = "myObj" + myUUT;
myLogger = LogManager.GetLogger(logString);
}
public void LogMessage(string msg)
{
myLogger.Info("UUT" + myUUT+ "|" + msg);
}
}
<rules>
<logger name="*" minlevel="Info" writeTo="logfile" />
<logger name="myObj1" minlevel="Info" writeTo="myObj1" />
<logger name="myObj2" minlevel="Info" writeTo="myObj2" />
<logger name="myObj3" minlevel="Info" writeTo="myObj3" />
<logger name="myObj4" minlevel="Info" writeTo="myObj4" />
<logger name="*" minlevel="Info" writeTo="console" />
</rules>