私のNLogターゲットは次のとおりです:
<targets>
<target xsi:type="Console" name="console"
layout="${longdate}|${level}|${message}" />
<target xsi:type="File" name="ErrorLog" fileName="${basedir}/error.txt"
layout="${longdate}
Trace: ${stacktrace}
${message}" />
<target xsi:type="File" name="AccessLog" fileName="${basedir}/access.txt"
layout="${shortdate} | ${message}" />
</targets>
ただし、ユーザーが自分のマシンの管理者でない場合は、「プログラムファイル」への書き込みアクセス権がないため、問題が発生します。どうすれば%AppData%
BaseDirの代わりにNLogへ?
オーレンの答えは正しい答えでなければなりません。しかし、私の人生では、nLog 2.0.0.0を使用して.NET 4.0 Webサイトで動作させることができませんでした。私は単純に使用してしまいました
fileName="${basedir}app_data\logs\${shortdate}.log"
$ {specialfolder:ApplicationData}も機能します
以前の回答は私が抱えていた問題を解決するのに役立ちましたが、数年後、v4.3ではソリューションが多少異なります。ディレクトリとファイル名はパスと結合されます。
@theGeckoのリンクはまだ構文に対して最新ですが、ページには例が不足しています。
https://github.com/nlog/NLog/wiki/Special-Folder-Layout-Renderer
次の例では、ファイルmyLog.log
現在のユーザーのアプリケーションデータローミングディレクトリC:\USers\current.user\AppData\Roaming\My\Path\Somewhere
:
fileName="${specialfolder:dir=My/Path/Somewhere/:file=myFile.log:folder=ApplicationData}"