在NLog中使用AppData位置

时间:2010-01-04 15:25:10

标签: nlog

我的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%添加到NLog而不是BaseDir?

5 个答案:

答案 0 :(得分:75)

您正在寻找NLog special folders

示例:

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

答案 1 :(得分:13)

奥伦的回答应该是正确的答案。然而,对于我的生活,我无法使用nLog 2.0.0.0使用我的.NET 4.0网站。我最终只使用

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

答案 2 :(得分:6)

$ {specialfolder:ApplicationData}也可以使用

答案 3 :(得分:1)

用于登录到项目目录:

虽然先前的答案适用于原始问题,但搜索如何登录到项目 APP_DATA 目录会导致此问题。虽然 bkaid 的答案适用于 ASP.NET 并专门用于使用 APP_DATA 文件夹,但对于 .NET Core 和 .NET 5,解决方案有点不同,因为该主题已被弃用定义一个 wwwroot 文件夹只用于那些应该提供的东西,其余的都是私有的。那么,.NET Core/5 的答案是写入解决方案根目录:

  1. 首先,确保将 NLog.Web.AspNetCore 程序集添加到 nlog.config
    <extensions>
        <add assembly="NLog.Web.AspNetCore"/>
    </extensions>
    
  2. 然后使用该扩展程序提供的布局渲染器之一,在本例中 ${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,该文件永远不会由面向公众的网站提供。此程序集提供的其他布局渲染器是 listed on the NLog website

答案 4 :(得分:0)

以前的答案有助于解决我遇到的问题,但几年之后,解决方案现在在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}"