使NLog.config文件从(d:\ dev)而不是“\ bin \ debug \”加载文件

时间:2013-04-11 20:28:33

标签: c# configuration configuration-files nlog nlog-configuration

我在特定的DLL中使用Nlog进行日志记录。然后将DLL用于另一个应用程序(使用System.Reflection.Assembly.LoadFrom(path + a.dll)动态加载)。我手动将Nlog.dll和Nlog.config文件放在Path文件夹中,应用程序正常执行,但它不记录任何消息。

但是,当我继续将Nlog.config文件手动放在应用程序目录(\bin\debug\)中时,会记录消息。

有人可以告诉我如何将Nlog.Config的搜索位置指向除d:\dev以外的其他目录(\bin\debug\)。

5 个答案:

答案 0 :(得分:44)

以下是我如何将Nlog的配置更改为指向执行程序集文件夹中的Nlog.config文件。

string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
NLog.LogManager.Configuration = new NLog.Config.XmlLoggingConfiguration(assemblyFolder + "\\NLog.config", true);

答案 1 :(得分:5)

请参阅NLog wiki上的Configuration file locations

NLog定位配置的方式基本上是:

  • 标准应用程序配置文件(通常是applicationname.exe.config)
  • 应用程序目录中的applicationname.exe.nlog
  • 应用程序目录中的NLog.config
  • NLog.dll.nlog位于NLog.dll所在的目录中(仅当NLog不在GAC中时)
  • NLOG_GLOBAL_CONFIG_FILE环境变量指向的文件名(如果已定义,仅限NLog 1.0 - 在NLog 2.0中删除支持)

没有其他方法可以做到这一点。

答案 2 :(得分:2)

NLog配置需要驻留在正在运行动态拉动a.dll的应用程序的文件夹中。 如果您正在调试,那么当它放入bin \ debug时它就可以工作。 如果您使用的是Visual Studio,请尝试将您的nlog.config设置为“始终复制”,它应该放在您需要的位置。

答案 3 :(得分:2)

我找到了

NLog.LogManager.Configuration = new NLog.Config.XmlLoggingConfiguration(logFilePath, true);

实际上将记录器指向要记录的文件,而不是配置文件。关于这一点的好处是你可以定义日志文件路径而无需知道ExecutingAssembly - 这在使用ExcelDNA等时特别有用,因为XLL动态地将程序集作为比特流加载,所以

Assembly.GetExecutingAssembly().Location

抛出异常。

答案 4 :(得分:0)

您可以在NLog.config中使用包含文件。拥有一个简单的NLog.config,其中仅包含来自D:\DEV的NLog.config。

例如:

<nlog>
    <include file="D:\DEV\NLog.Config" />
</nlog>

您也可以使用app.config来实现。例如:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
    </configSections>
    <nlog>
        <include file="D:\DEV\NLog.Config" />
    </nlog>
</configuration>

另请参阅:https://github.com/nlog/nlog/wiki/Configuration-file#include-files