c#logging framework - 具有显式名称

时间:2016-09-18 18:17:14

标签: c# logging frameworks

我在搜索c#的日志框架,我可以从代码中轻松设置日志文件名。

我的程序启动了几个后台工作程序,它们都应该登录到自己的日志文件中。 他们使用相同的类进行工作,有时使用不同的线程。

e.g。

backgroundworker1:
    var aboImport = new CSVImport(file1);        <-- logs into backgroundWorker1.log
    aboImport.Execute();
    ArchiveFile(file1);
 
 backgroundworker2:
 var addressImport = new CSVImport(file2);        <-- logs into backgroundWorker2.log
 addressImport.Execute();
 ArchiveFile(file2);
 
e.g.

backgroundWorker1.log
backgroundWorker2.log
backgroundWorker3.log
...

heartbeat.log                   <-- I´can see my workers or main thread is running an working

我目前正在使用log4net,但这似乎不符合我的需求。 我发现(Create multiple Logfiles with dynamic Names with log4net)他们在代码中创建动态appender。 但我不明白这是否有效,因为log4net定义通常与命名空间相关联。 其他日志框架可以更优雅吗?您为此推荐了哪种日志框架?

2 个答案:

答案 0 :(得分:1)

远离Log4Net。这不是一个积极开发的项目。最近发布的时间差不多1年前(2015年12月)。 NLog得到了更好的支持。

话虽如此,所有日志记录框架都允许您使用一堆不同的“宏”执行所有模板驱动...您可以将文件名基于threadId或其他一些动态值......或者只是通过它传递它键/值对。您必须查看所有可用的“宏”并选择适用于您的场景的宏。

答案 1 :(得分:1)

使用nlog,我可以轻松创建具有不同文件目标的记录器。

private static void Main(string[] args)
{
    var config = LogManager.Configuration;
    AddLogger(config, "logger1", @"C:\Temp\Logfile\Log1.txt");
    AddLogger(config, "logger2", @"C:\Temp\Logfile\Log2.txt");
    LogManager.Configuration = config;

    var logger1 = LogManager.GetLogger("logger1");
    logger1.Debug("Test1");

    var logger2 = LogManager.GetLogger("logger2");
    logger2.Debug("Test2");
}

private static void AddLogger(LoggingConfiguration config, string loggerName, string fileName)
{
    var fileTarget = new FileTarget();
    config.AddTarget(loggerName, fileTarget);
    fileTarget.FileName = fileName;

    var rule = new LoggingRule(loggerName, LogLevel.Debug, fileTarget);
    config.LoggingRules.Add(rule);
}