C# “LogManager”是.LogManager之间的不明确引用
我收到错误消息,错误19“LogManager”是“Common.Logging.LogManager”和“NLog.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
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对消息进行格式化。你必须改变所有这些东西。