2010-08-26 38 views
3

我想转换一堆应用程序使用的现有日志记录库以使用NLog。现有的日志记录代码没有间接寻址,日志记录调用直接从调用者发送到web服务调用。现有的日志记录代码是作为一个静态单例实现的。我需要这样做,使得使用此库的现有应用程序在拾取更改的日志记录库时不需要进行配置或代码更改。稍后,我可以根据需要更新应用程序,配置新的日志记录目标或更改代码以直接登录到NLog。如何在NLog中配置默认​​目标

为此,我打算让静态日志记录代码通过NLog。现有的日志记录调用将通过NLog进行路由,并且现有的webservice调用将被封装在自定义的NLog目标中。

要在旧版应用程序上进行此项工作而不更改它们,我需要以编程方式将自定义目标设置为默认值(当没有在配置文件中配置时)。我想这样做,而无需对众多现有应用程序进行配置更改,因此我需要以编程方式执行此操作。

问题是......它不工作。对这种方法有什么想法?以下是我试图添加到现有记录器类中的代码以创建默认目标的代码。

我不介意去log4net。只要看看API,我最初选择NLog作为名称对我来说更有意义。

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(); 
    } 

回答

4

好吧,如果你是新来NLOG,因为我是,被告知有关的一切安装程序覆盖安装的例子。在这种情况下,我需要:

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(); 
    }