2016-09-18 60 views
0

我正在寻找一个c#的日志框架,我可以从代码中轻松设置日志文件名。c#日志框架 - 明确名称的日志文件

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

例如

使用

I'm使用log4net的此刻,但这似乎不适合我的需要

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
。 我发现( Create multiple Logfiles with dynamic Names with log4net)他们在代码中创建动态appender。 但我不明白这是否正常工作,因为log4net定义通常与名称空间相关联。 其他日志框架可以更优雅吗?你为此推荐哪种日志框架?

+0

Log4net是市场上最好的记录仪。这很复杂,但您也可以使用简单的配置。 –

+0

@ P.K。,大声笑......它甚至不支持。最后一个版本是一年前。 – SledgeHammer

回答

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); 
} 
+0

最近我们还增加了'config.AddRule',使添加/创建NLog规则变得更加简单和简短 – Julian

1

远离Log4Net。这不是一个积极开发的项目。最近的发行版差不多是1年前(2015年12月)。 NLog支持得更好。这样说,所有的日志框架都可以让你用一堆不同的“宏”来驱动一切模板......你可以将文件名设置为threadId或其他动态值......或者只是将它传入通过一个键/值对。您必须查看所有可用的“宏”并选择适用于您的方案的宏。

+0

问题不是activley开发的。当它拥有日志框架的所有特性时,工作流畅吗? ..我不能绑定threadId上的文件名,因为不能保证所有代码都在同一个线程中运行。我需要将文件名设置为对象的实例,以便它可以在此文件中明确记录。 – JohnnyBravo75

+0

@ JohnnyBravo75你想使用被遗弃的项目给你:)所有的日志框架都具有相同的功能,并且工作方式几乎相同。 Nlog是最活跃的。正如我所说的,有很多宏可供您选择来动态创建您的文件名。 – SledgeHammer