web-dev-qa-db-fra.com

utilisation de l'emplacement AppData dans NLog

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?

45
Malfist

Vous recherchez les Dossiers spéciaux NLog .

Exemple:

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

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" 
12
bkaid

$ {specialfolder: ApplicationData} fonctionne également

5
Sylar

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}"
0
Hooligancat