используя расположение AppData в NLog - PullRequest
45 голосов
/ 04 января 2010

Мои цели 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?

Ответы [ 4 ]

75 голосов
/ 04 января 2010

Вам нужны специальные папки NLog .

Пример:

...fileName="${specialfolder:folder=ApplicationData}/Program/file.txt"...
13 голосов
/ 25 марта 2011

Ответ Орена должен быть правильным. Однако я не мог заставить его работать с моим веб-сайтом .NET 4.0, используя nLog 2.0.0.0. Я просто использовал

fileName="${basedir}app_data\logs\${shortdate}.log" 
6 голосов
/ 22 февраля 2011

$ {specialfolder: ApplicationData} также работает

0 голосов
/ 09 июля 2016

Предыдущие ответы помогли решить проблему, с которой я столкнулся, но через пару лет решение несколько изменилось в версии 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}"
...