我正在编写一个小文件转换实用程序。文件在放入目录时会自动转换。
我正在使用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();
但是没有创建日志文件。
我错了什么?有什么想法吗?
答案 0 :(得分:53)
这个帖子的第二篇帖子让我得到了解决方案: 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!");