代码之家  ›  专栏  ›  技术社区  ›  MartinStettner

在运行时在nlog中添加/删除日志文件

  •  25
  • MartinStettner  · 技术社区  · 15 年前

    我正在写一个小的文件转换实用程序。文件被放到目录中时会自动转换。

    我正在使用nlog进行日志记录。除了使用 NCOR.CONF (它接收所有生成的消息),我想为每个输入文件创建一个额外的日志文件,具有类似的名称,并且包含转换过程中写入的所有日志消息。

    不幸的是,我似乎找不到如何在运行时正确地添加新的文件目标和适当的规则。我想要一切 Logger 在转换过程中要写入新日志文件的对象。

    我试过类似的东西

    var logfile = new NLog.Targets.FileTarget();
    logfile.FileName = fileName + ".log";
    logfile.KeepFileOpen = true;
    logfile.Initialize();
    var rule = new NLog.Config.LoggingRule("*", logfile);
    NLog.LogManager.Configuration.LoggingRules.Add(rule);
    NLog.LogManager.ReconfigExistingLoggers();
    //
    // Proceed with converting file
    //
    logfile.Flush();
    NLog.LogManager.Configuration.LoggingRules.Remove(rule);
    NLog.LogManager.ReconfigExistingLoggers();
    

    但没有创建日志文件。

    我做错什么了?有什么想法吗?

    1 回复  |  直到 14 年前
        1
  •  53
  •   matthughes404    14 年前

    这条线的第二个帖子让我找到了解决方案: http://nlog-project.org/forum.html#nabble-td1685349

    您必须获取当前的nlog配置,对此loggingconfiguration对象进行更改,然后将其分配回logmanager.configuration。

    这是我使用的代码:

    LoggingConfiguration config = LogManager.Configuration;
    
    var logFile = new FileTarget();
    config.AddTarget("file", logFile);
    
    logFile.FileName = fileName + ".log";
    logFile.Layout = "${date} | ${message}";
    
    var rule = new LoggingRule("*", LogLevel.Info, logFile);
    config.LoggingRules.Add(rule);
    
    LogManager.Configuration = config;
    
    logger.Info("File converted!");