特定の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\
)にポイントする方法を教えてもらえますか?.
以下は、ExecutingAssemblyのフォルダーにあるNlog.configファイルを指すようにNlogの構成を変更した方法です。
string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
NLog.LogManager.Configuration = new NLog.Config.XmlLoggingConfiguration(assemblyFolder + "\\NLog.config", true);
NLog wikiの 構成ファイルの場所 を参照してください。
基本的に、NLogが構成を見つける方法は次のとおりです。
これを行う他の方法はありません。
見つけた
NLog.LogManager.Configuration = new NLog.Config.XmlLoggingConfiguration(logFilePath, true);
実際には、構成ファイルではなく、ログに記録されるファイルをロガーにポイントします。これの優れている点は、ExecutingAssemblyを知らなくてもログファイルのパスを定義できることです。これは、XLLがアセンブリをビットストリームとして動的にロードするため、ExcelDNAなどを使用する場合に特に便利です。
Assembly.GetExecutingAssembly().Location
例外をスローします。
NLog構成は、a.dllを動的にプルしているアプリが実行されているフォルダーに存在する必要があります。デバッグしている場合は、bin\debugに配置すると機能するのはそのためです。 Visual Studioを使用している場合は、nlog.configを「常にコピー」に設定してみてください。必要な場所に移動するはずです。
NLog.configでインクルードファイルを使用できます。 D:\DEV
のNLog.configのみを含む単純な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