2010-08-26 4 views
3

J'essaie de convertir la bibliothèque de journalisation existante utilisée par un tas d'applications pour utiliser NLog. Le code de journalisation existant n'a pas d'indirection, les appels de journalisation vont directement de l'appelant à un appel de service Web. Le code de journalisation existant est implémenté en tant que singleton statique. Je dois faire cela de telle sorte que les applications existantes qui utilisent cette bibliothèque n'aient pas besoin de modifications de configuration ou de code lorsqu'elles récupèrent la bibliothèque de journalisation modifiée. Plus tard, je peux mettre à jour les applications au besoin, en configurant une nouvelle cible de journalisation ou en changeant le code pour se connecter directement à NLog. Pour ce faire, j'allais faire passer le code de journalisation statique par NLog. Les appels de journalisation existants seront acheminés via NLog et l'appel de service Web existant sera enveloppé dans une cible NLog personnalisée. Pour que cela fonctionne sur les applications héritées sans les modifier, j'ai besoin de définir par programme la cible personnalisée par défaut (lorsqu'aucun n'est configuré dans un fichier de configuration). Je voudrais le faire sans faire de changements de configuration sur les nombreuses applications existantes, donc je dois le faire par programmation.Comment configurer une cible par défaut dans NLog

Le problème est ... son ne fonctionne pas. Des pensées sur cette approche? Ci-dessous le code que j'ai essayé d'ajouter au hook dans la classe logger existante pour créer la cible par défaut.

Cela ne me dérangerait pas d'aller à log4net non plus. En regardant les API, j'ai d'abord choisi NLog car les noms avaient plus de sens pour moi.

public static class LegacyLogger 
{ 
    static LegacyLogger() 
    { 
     if (LogManager.Configuration == null 
      || LogManager.Configuration.GetConfiguredNamedTargets().Count == 0) 
     { 
      if (LogManager.Configuration == null) 
      { 
       LogManager.Configuration = new LoggingConfiguration(); 
      } 

      //LogManager.Configuration.AddTarget("LegacyLogger", new NLog.Targets.DebuggerTarget()); 
      LogManager.Configuration.AddTarget("LegacyLogger", new LegacyLoggerTarget()); 
     } 

     _logger = LogManager.GetCurrentClassLogger(); 
    } 

Répondre

4

Ok, si vous êtes nouveau NLog, comme je l'étais, sachez les exemples installés avec le couvercle d'installation de tout. Dans ce cas, j'avais besoin de:

public static class LegacyLogger 
{ 
    static LegacyLogger() 
    { 
     if (LogManager.Configuration == null 
      || LogManager.Configuration.GetConfiguredNamedTargets().Count == 0) 
     { 
      NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(new LegacyLoggerTarget(), LogLevel.Trace); 
     } 

     _logger = LogManager.GetCurrentClassLogger(); 
    } 
Questions connexes