31

我正在编写一个小文件转换实用程序。文件在放入目录时会自动转换。

我正在使用 NLog 进行日志记录。除了使用NLog.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();

但是没有创建日志文件。

我做错了什么?任何的想法?

4

1 回答 1

60

该线程的第二篇文章使我找到了解决方案: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!");
于 2010-08-30T19:31:00.920 回答