Mettre à jour le nom du fichier cible de NLog à l'exécution

Dans mon application, je travaille sur plusieurs milliers de documents par jour. J'aimerais, dans certains cas, des journaux, un journal par document. Ensuite, je voudrais pour une cible spécifique changer le nom du fichier de sortie (et seulement le nom du fichier) à l'exécution.

autour du web j'ai trouvé comment créer une cible en me programmant je voudrais juste mettre à jour un le nom de fichier par la programmation. J'ai essayé le code ci-dessous. L'erreur que je reçois est "LayoutRender cannot be found 'logDirectory'.

N'importe quelle idée ?

Merci,

var target = (FileTarget)LogManager.Configuration.FindTargetByName("logfile");
target.FileName = "${logDirectory}/file2.txt";

LoggingConfiguration config = new LoggingConfiguration();
var asyncFileTarget = new AsyncTargetWrapper(target);
config.AddTarget("logfile", asyncFileTarget);

LogManager.Configuration = config;

Le fichier de config est :

  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <variable name="logDirectory" value="C:/MyLogs"/>
    <targets>
      <target name="logfile" xsi:type="File" layout="${date:format=dd/MM/yyyy HH:mm:ss.fff}|${level}|${stacktrace}|${message}" fileName="${logDirectory}/file.txt" />
    </targets>

    <rules>
      <logger name="*" minlevel="Info" writeTo="logfile" />
    </rules>    
  </nlog>
15
demandé sur Kris-I 2013-12-24 11:32:06

3 réponses

ReconfigExistingLoggers méthode:

var target = (FileTarget)LogManager.Configuration.FindTargetByName("logfile");
target.FileName = "${logDirectory}/file2.txt";
LogManager.ReconfigExistingLoggers();

comme écrit dans docs:

Boucle tous les loggers déjà retournés par GetLogger. et recalcule leur liste de cibles et de filtres. Utile après avoir modifié le programmer la configuration pour s'assurer que tous les loggers ont été correctement configuré.

EDIT:

Essayez d'utiliser la mise en page personnalisée de rendu: fichier de configuration NLog pour obtenir les valeurs de configuration à partir d'un site web.config

19
répondu Tony 2017-05-23 12:18:02

Tony est la solution ne semble pas fonctionner si vous utilisez NLog Async (