12

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

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

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

回答

31

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

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

你可以使用Path.Combine(assemblyFolder,“NLog.config”) – Tempeck 2017-06-09 12:20:39

0

NLog配置需要驻留在动态提取a.dll的应用程序所在的文件夹中。 如果您正在进行调试,那么将其放入bin \ debug中时会出现问题。 如果您使用的是Visual Studio,请尝试将nlog.config设置为“始终复制”,并且它应该放在您需要的位置。

+0

感谢回复@jim。我确实在应用程序X的项目'a'中将Nlog.config设置为'始终复制',并将其复制到应用程序X的'\ bin \ debug \'文件夹中。但是我在全新应用程序中使用a.dll (Y),并希望它进入应用程序Y的“bin/debug”或进行更改,以便在'd:\ dev'文件夹中查找Nlog.config – 2013-04-11 20:46:36

5

请参阅NLog wiki上的Configuration file locations

基本上方式NLOG所在的配置是:

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

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

+1

*有一种方法可以执行此操作[见上面](http://stackoverflow.com/a/16062987/11635) – 2016-03-08 13:26:15

2

我发现

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

实际上指向的记录器将被记录到,而不是配置文件中的文件。关于这个伟大的事情是,你可以定义日志文件的路径,而不需要知道ExecutingAssembly - 这个使用ExcelDNA等时特别有用的XLL动态加载组件作为一个比特流,所以

Assembly.GetExecutingAssembly().Location 

抛出异常。

相关问题