Domanda
I miei obiettivi NLog è in questo modo:
<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>
Ma questo provoca problemi se l'utente non è un amministratore sul computer, perché non avranno accesso in scrittura a "Programmi". Come posso ottenere qualcosa di simile a %AppData%
NLog invece di BaseDir?
Soluzione
Stai cercando il NLog cartelle speciali .
Esempio:
...fileName="${specialfolder:folder=ApplicationData}/Program/file.txt"...
Altri suggerimenti
La risposta di Oren dovrebbe essere la risposta giusta. Tuttavia, per la vita di me non ho potuto farlo funzionare con il mio sito web NET 4.0 utilizzando nCollegatevi 2.0.0.0. Ho finito per usare semplicemente
fileName="${basedir}app_data\logs\${shortdate}.log"
$ {specialfolder: ApplicationData} funziona anche
Le risposte precedenti hanno contribuito a risolvere il problema che stavo avendo, ma un paio di anni più tardi, e la soluzione è ora un po 'diversa in V4.3. La directory e il nome sono combinati con il percorso.
@ collegamento del theGecko è ancora attuale per la sintassi, ma la pagina è carente di un esempio:
https://github.com/nlog/NLog/wiki/ speciale-Folder-layout-renderer
Il seguente esempio potrebbe scrivere il file myLog.log
alla dati delle applicazioni gli utenti attuali di roaming directory C:\USers\current.user\AppData\Roaming\My\Path\Somewhere
:
fileName="${specialfolder:dir=My/Path/Somewhere/:file=myFile.log:folder=ApplicationData}"