我在特定的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\
)。
答案 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定位配置的方式基本上是:
没有其他方法可以做到这一点。
答案 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