Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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# “LogManager”是.LogManager之间的不明确引用_C#_Logging_Nlog_Common.logging - Fatal编程技术网

C# “LogManager”是.LogManager之间的不明确引用

C# “LogManager”是.LogManager之间的不明确引用,c#,logging,nlog,common.logging,C#,Logging,Nlog,Common.logging,我收到错误消息,错误19“LogManager”是“Common.Logging.LogManager”和“NLog.LogManager”之间的模糊引用 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Common.Logging; using sample; using System.Conf

我收到错误消息,错误19“LogManager”是“Common.Logging.LogManager”和“NLog.LogManager”之间的模糊引用

   using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     using Common.Logging;
     using sample;
     using System.Configuration;
     using System.Xml.Linq;  
     using NLog;

namespace sample
{
  public class Etest
  {
    private static Logger logger = LogManager.GetCurrentClassLogger(); 
    private static ILog log = LogManager.GetCurrentClassLogger();
  }
}
在C 2008应用程序中,我正在尝试将nlog开源日志记录工具添加到已使用common.logging的应用程序中,该日志记录是从以下位置获得的:

   using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     using Common.Logging;
     using sample;
     using System.Configuration;
     using System.Xml.Linq;  
     using NLog;

namespace sample
{
  public class Etest
  {
    private static Logger logger = LogManager.GetCurrentClassLogger(); 
    private static ILog log = LogManager.GetCurrentClassLogger();
  }
}
我添加了对NLog文件的引用,并将NLog添加到using语句中

   using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     using Common.Logging;
     using sample;
     using System.Configuration;
     using System.Xml.Linq;  
     using NLog;

namespace sample
{
  public class Etest
  {
    private static Logger logger = LogManager.GetCurrentClassLogger(); 
    private static ILog log = LogManager.GetCurrentClassLogger();
  }
}
问题是这两个工具都使用了一个名为“LogManager”的对象

   using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     using Common.Logging;
     using sample;
     using System.Configuration;
     using System.Xml.Linq;  
     using NLog;

namespace sample
{
  public class Etest
  {
    private static Logger logger = LogManager.GetCurrentClassLogger(); 
    private static ILog log = LogManager.GetCurrentClassLogger();
  }
}
因此,您可以告诉我如何解决我的问题,这样我就可以使用两个日志管理器

   using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     using Common.Logging;
     using sample;
     using System.Configuration;
     using System.Xml.Linq;  
     using NLog;

namespace sample
{
  public class Etest
  {
    private static Logger logger = LogManager.GetCurrentClassLogger(); 
    private static ILog log = LogManager.GetCurrentClassLogger();
  }
}
以下是我的代码,如下所示: xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance>

   using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     using Common.Logging;
     using sample;
     using System.Configuration;
     using System.Xml.Linq;  
     using NLog;

namespace sample
{
  public class Etest
  {
    private static Logger logger = LogManager.GetCurrentClassLogger(); 
    private static ILog log = LogManager.GetCurrentClassLogger();
  }
}

你只需要确保电话是合格的

   using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     using Common.Logging;
     using sample;
     using System.Configuration;
     using System.Xml.Linq;  
     using NLog;

namespace sample
{
  public class Etest
  {
    private static Logger logger = LogManager.GetCurrentClassLogger(); 
    private static ILog log = LogManager.GetCurrentClassLogger();
  }
}
public class Etest
{
   private static Logger logger = NLog.LogManager.GetCurrentClassLogger(); 
   private static ILog log = Common.Logging.LogManager.GetCurrentClassLogger();
}

你只需要确保电话是合格的

   using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     using Common.Logging;
     using sample;
     using System.Configuration;
     using System.Xml.Linq;  
     using NLog;

namespace sample
{
  public class Etest
  {
    private static Logger logger = LogManager.GetCurrentClassLogger(); 
    private static ILog log = LogManager.GetCurrentClassLogger();
  }
}
public class Etest
{
   private static Logger logger = NLog.LogManager.GetCurrentClassLogger(); 
   private static ILog log = Common.Logging.LogManager.GetCurrentClassLogger();
}

您可以通过使用指令或使用全名为其中一个定义别名

   using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     using Common.Logging;
     using sample;
     using System.Configuration;
     using System.Xml.Linq;  
     using NLog;

namespace sample
{
  public class Etest
  {
    private static Logger logger = LogManager.GetCurrentClassLogger(); 
    private static ILog log = LogManager.GetCurrentClassLogger();
  }
}
但是如果您使用的是Common.Logging,我认为您不需要参考NLog。因为Common.Logging库引入了一个简单的抽象,允许您在运行时选择特定的日志实现。因此,您的代码应该只依赖于Common.Logging库,而不是其他一些日志系统,如log4net或NLog:

   using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     using Common.Logging;
     using sample;
     using System.Configuration;
     using System.Xml.Linq;  
     using NLog;

namespace sample
{
  public class Etest
  {
    private static Logger logger = LogManager.GetCurrentClassLogger(); 
    private static ILog log = LogManager.GetCurrentClassLogger();
  }
}
using Common.Logging; // only this library is used
...
ILog log = LogManager.GetCurrentClassLogger();
并将Common.Logging配置为使用NLog:

   using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     using Common.Logging;
     using sample;
     using System.Configuration;
     using System.Xml.Linq;  
     using NLog;

namespace sample
{
  public class Etest
  {
    private static Logger logger = LogManager.GetCurrentClassLogger(); 
    private static ILog log = LogManager.GetCurrentClassLogger();
  }
}
<configuration>
  <configSections>
    <sectionGroup name="common">
      <section name="logging" 
               type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
    </sectionGroup>    
    <section name="nlog" 
             type="NLog.Config.ConfigSectionHandler, NLog"/>
  </configSections>

  <common>
    <logging>
      <factoryAdapter type="Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog">
        <arg key="configType" value="INLINE" />
      </factoryAdapter>
    </logging>
  </common>

  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <targets>
      <target name="console" xsi:type="Console" 
              layout="${date:format=HH\:MM\:ss} ${logger} ${message}" />
    </targets>
    <rules>
      <logger name="*" minlevel="Debug" writeTo="console" />
    </rules>
  </nlog>
</configuration> 

您可以通过使用指令或使用全名为其中一个定义别名

   using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     using Common.Logging;
     using sample;
     using System.Configuration;
     using System.Xml.Linq;  
     using NLog;

namespace sample
{
  public class Etest
  {
    private static Logger logger = LogManager.GetCurrentClassLogger(); 
    private static ILog log = LogManager.GetCurrentClassLogger();
  }
}
但是如果您使用的是Common.Logging,我认为您不需要参考NLog。因为Common.Logging库引入了一个简单的抽象,允许您在运行时选择特定的日志实现。因此,您的代码应该只依赖于Common.Logging库,而不是其他一些日志系统,如log4net或NLog:

   using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     using Common.Logging;
     using sample;
     using System.Configuration;
     using System.Xml.Linq;  
     using NLog;

namespace sample
{
  public class Etest
  {
    private static Logger logger = LogManager.GetCurrentClassLogger(); 
    private static ILog log = LogManager.GetCurrentClassLogger();
  }
}
using Common.Logging; // only this library is used
...
ILog log = LogManager.GetCurrentClassLogger();
并将Common.Logging配置为使用NLog:

   using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     using Common.Logging;
     using sample;
     using System.Configuration;
     using System.Xml.Linq;  
     using NLog;

namespace sample
{
  public class Etest
  {
    private static Logger logger = LogManager.GetCurrentClassLogger(); 
    private static ILog log = LogManager.GetCurrentClassLogger();
  }
}
<configuration>
  <configSections>
    <sectionGroup name="common">
      <section name="logging" 
               type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
    </sectionGroup>    
    <section name="nlog" 
             type="NLog.Config.ConfigSectionHandler, NLog"/>
  </configSections>

  <common>
    <logging>
      <factoryAdapter type="Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog">
        <arg key="configType" value="INLINE" />
      </factoryAdapter>
    </logging>
  </common>

  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <targets>
      <target name="console" xsi:type="Console" 
              layout="${date:format=HH\:MM\:ss} ${logger} ${message}" />
    </targets>
    <rules>
      <logger name="*" minlevel="Debug" writeTo="console" />
    </rules>
  </nlog>
</configuration> 

我基本上需要使用NLog作为配置管理器,因为我需要错误消息的级别。作为这个过程的一部分,我将使用nlog逻辑删除common.logging。有没有办法将Nlog分配给变量?如果是这样,安装程序如何将值分配给变量?@user1816979实际上很常见。日志适配器提供相同级别的消息-“跟踪、调试、信息、警告、错误、致命”。如果您真的需要使用NLog,那么它不像使用Common.Logging更改为使用NLog那么容易。首先-您需要将ILog更改为Logger。当然,您在调用logger时会遇到问题,因为API是不同的—NLog使用{Level}异常方法来编写异常,这是通用的。日志使用{Level}方法来实现这一点。同样常见。日志使用FormatMessageCallback对消息进行格式化。您必须更改所有这些内容。我基本上需要使用NLog作为配置管理器,因为我需要错误消息的级别。作为这个过程的一部分,我将使用nlog逻辑删除common.logging。有没有办法将Nlog分配给变量?如果是这样,安装程序如何将值分配给变量?@user1816979实际上很常见。日志适配器提供相同级别的消息-“跟踪、调试、信息、警告、错误、致命”。如果您真的需要使用NLog,那么它不像使用Common.Logging更改为使用NLog那么容易。首先-您需要将ILog更改为Logger。当然,您在调用logger时会遇到问题,因为API是不同的—NLog使用{Level}异常方法来编写异常,这是通用的。日志使用{Level}方法来实现这一点。同样常见。日志使用FormatMessageCallback对消息进行格式化。你必须改变所有这些东西。