Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Nlog将类的每个实例记录到不同的文件中?_C#_Wpf_Nlog - Fatal编程技术网

C# 如何使用Nlog将类的每个实例记录到不同的文件中?

C# 如何使用Nlog将类的每个实例记录到不同的文件中?,c#,wpf,nlog,C#,Wpf,Nlog,我有一个项目,我在同一时间测试八件相同的设备。我需要能够为每件设备写入日志。我还需要另一个包含系统日志消息的日志文件。在过去,我写过自己的日志,但想尝试Nlog。我写了一个简单的测试,看看这是否可行,但我并没有取得多少成功。我想做的是让TempObject的每个实例都登录到自己的文件中。当前,以下代码登录到每个日志文件中: NLog.Config TempObject.cs 我必须在TempObject中更改以下内容,它可以正常工作 public class TempObject { pri

我有一个项目,我在同一时间测试八件相同的设备。我需要能够为每件设备写入日志。我还需要另一个包含系统日志消息的日志文件。在过去,我写过自己的日志,但想尝试Nlog。我写了一个简单的测试,看看这是否可行,但我并没有取得多少成功。我想做的是让
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>