Ответ 1
Вы ищете специальные папки NLog.
Пример:
...fileName="${specialfolder:folder=ApplicationData}/Program/file.txt"...
Мои цели 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>
Но это вызывает проблемы, если пользователь не является администратором на своем компьютере, потому что у них не будет доступа на запись к "Program Files". Как я могу получить что-то вроде %AppData%
для NLog вместо BaseDir?
Вы ищете специальные папки NLog.
Пример:
...fileName="${specialfolder:folder=ApplicationData}/Program/file.txt"...
Ответ Орена должен быть правильным ответом. Тем не менее, в течение жизни я не мог заставить его работать с моим веб-сайтом .NET 4.0 с помощью nLog 2.0.0.0. Я просто использовал просто
fileName="${basedir}app_data\logs\${shortdate}.log"
${specialfolder: ApplicationData} также работает
Предыдущие ответы помогли решить проблему, с которой я столкнулся, но через пару лет решение теперь несколько отличается от 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}"