Mes objectifs NLog est comme ceci:
<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>
Mais cela pose des problèmes si l'utilisateur n'est pas un administrateur sur sa machine, car il n'aura pas accès en écriture à "Program Files". Comment puis-je obtenir quelque chose comme %AppData%
to NLog au lieu de BaseDir?
Vous recherchez les Dossiers spéciaux NLog .
Exemple:
...fileName="${specialfolder:folder=ApplicationData}/Program/file.txt"...
La réponse d'Oren devrait être la bonne réponse. Cependant, pour toute ma vie, je ne pouvais pas le faire fonctionner avec mon site Web .NET 4.0 à l'aide de nLog 2.0.0.0. J'ai fini par utiliser simplement
fileName="${basedir}app_data\logs\${shortdate}.log"
$ {specialfolder: ApplicationData} fonctionne également
Les réponses précédentes ont aidé à résoudre le problème que je rencontrais, mais quelques années plus tard, la solution est maintenant quelque peu différente sous la v4.3. Le répertoire et le nom de fichier sont combinés avec le chemin.
Le lien de @ theGecko est toujours d'actualité pour la syntaxe, mais la page manque d'un exemple:
https://github.com/nlog/NLog/wiki/Special-Folder-Layout-Renderer
L'exemple suivant écrit le fichier myLog.log
dans le répertoire itinérant de données d'application de l'utilisateur actuel C:\USers\current.user\AppData\Roaming\My\Path\Somewhere
:
fileName="${specialfolder:dir=My/Path/Somewhere/:file=myFile.log:folder=ApplicationData}"