在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> 

但是,如果用户不是他们机器上的pipe理员,则会导致问题,因为他们不具有对“程序文件”的写入访问权限。 我怎样才能得到像%AppData%到NLog而不是BaseDir?

你正在寻找NLog的特殊文件夹 。

例:

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

奥伦的答案应该是正确的答案。 但是,在我的生活中,我无法使用nLog 2.0.0.0使用我的.NET 4.0网站。 我结束了使用简单

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

$ {specialfolder:ApplicationData}也适用

之前的答案有助于解决我遇到的问题,但几年后,现在解决scheme在v4.3下有所不同。 目录和文件名与path组合在一起。

@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}"