web-dev-qa-db-ja.com

NLogでAppDataの場所を使用する

私の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へ?

48
Malfist

NLog特殊フォルダー を探しています。

例:

...fileName="${specialfolder:folder=ApplicationData}/Program/file.txt"...
76
Oren Mazor

オーレンの答えは正しい答えでなければなりません。しかし、私の人生では、nLog 2.0.0.0を使用して.NET 4.0 Webサイトで動作させることができませんでした。私は単純に使用してしまいました

fileName="${basedir}app_data\logs\${shortdate}.log" 
13
bkaid

$ {specialfolder:ApplicationData}も機能します

6
Sylar

以前の回答は私が抱えていた問題を解決するのに役立ちましたが、数年後、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}"
1
Hooligancat