19

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

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

有人可以让我知道如何将 Nlog.Config 的搜索位置指向d:\dev\bin\debug\.

4

5 回答 5

53

下面是我如何更改 Nlog 的配置以指向 Executing Assembly 文件夹中的 Nlog.config 文件。

string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
NLog.LogManager.Configuration = new NLog.Config.XmlLoggingConfiguration(assemblyFolder + "\\NLog.config", true);
于 2013-04-17T14:37:02.520 回答
6

请参阅NLog wiki 上的配置文件位置。

基本上 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 中删除了支持)

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

于 2013-04-12T08:05:27.237 回答
2

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

于 2013-04-11T20:36:48.523 回答
2

我找到

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

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

Assembly.GetExecutingAssembly().Location

抛出异常。

于 2013-11-04T22:54:53.803 回答
1

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

前任:

<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

于 2019-11-17T19:03:00.387 回答