53

私の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のようなものを取得するにはどうすればよいですか?

4

5 に答える 5

92

NLogの特別なフォルダを探しています。

例:

...fileName="${specialfolder:folder=ApplicationData}/Program/file.txt"...
于 2010-01-04T15:55:43.747 に答える
13

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

fileName="${basedir}app_data\logs\${shortdate}.log" 
于 2011-03-24T22:50:27.707 に答える
7

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

于 2011-02-22T06:02:56.077 に答える
1

以前の回答は私が抱えていた問題の解決に役立ちましたが、数年後、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}"
于 2016-07-08T23:04:35.203 に答える
1

プロジェクトディレクトリにログを記録する場合:

APP_DATA前の回答は元の質問に対して機能しますが、プロジェクトディレクトリにログインする方法を検索すると、この質問が発生します。そして、bkaidの答えはASP.NETで機能し、APP_DATAフォルダーを具体的に使用する場合、.NETCoreと.NET5ではソリューションが少し異なります。これは、そのモチーフが放棄され、wwwrootフォルダーを定義するものだけが優先されるためです。提供する必要があり、残りはプライベートです。したがって、.NET Core / 5の答えは、ソリューションのルートディレクトリに書き込むことです。

  1. まず、NLog.Web.AspNetCoreアセンブリが次の場所に追加されていることを確認しnlog.configます。
    <extensions>
        <add assembly="NLog.Web.AspNetCore"/>
    </extensions>
    
  2. 次に、その拡張機能によって提供されるレイアウトレンダラーの1つを使用します。この場合${aspnet-appbasepath}は、ソリューションのルートディレクトリを参照します。
    <targets>
        <target name="file"
                type="File"
                xsi:type="File"
                fileName="${aspnet-appbasepath}/log/${shortdate}.log"
                layout="${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}"/>
    </targets>
    

これにより、ファイルがに書き込まれますが<solution folder>/log/2021-07-01.log、公開されているWebサイトからは提供されません。このアセンブリによって提供される他のレイアウトレンダラーは、NLogWebサイトにリストされています

于 2021-07-01T23:14:22.973 に答える