【问题标题】:Individual log file for each thread (Parallel.For) using log4net使用 log4net 为每个线程 (Parallel.For) 提供单独的日志文件
【发布时间】:2020-01-11 06:35:30
【问题描述】:

我需要为每个使用 log4net 的线程创建单独的日志文件。 我正在阅读多个邮箱,并希望在单个文件中通过电子邮件发送邮箱的信息和附件信息。

EmailMaster objEmailMaster = new EmailMaster();
List<MailboxConfiguration> lstMailBoxConfiguration = objEmailMaster.GetMailBoxInformation();

Parallel.For(0, lstMailBoxConfiguration.Count, i =>
{                       
    log.Debug("MailBox reading");    
    objEmailMaster.ReadAndDownloadEmails(lstMailBoxConfiguration[i]);                 
});

【问题讨论】:

  • 您是否已经尝试过?您有哪些特殊问题?

标签: c# multithreading logging log4net parallel.for


【解决方案1】:

您可以像在这个概念验证中那样按线程使用日志字典:

var ThreadedLogs = new Dictionary<Thread, Log>();

Action<Thread, string> Log = (thread, text) =>
{
  Monitor.Enter(ThreadedLogs);
  if ( !ThreadedLogs.ContainsKey(thread) )
    ThreadedLogs.Add(thread, new Log());
  ThreadedLogs[thread].Debug(text);
  Monitor.Exit(ThreadedLogs);
};

Parallel.For(0, lstMailBoxConfiguration.Count, i =>
{
  Log(Thread.CurrentThread, "MailBox reading");
  objEmailMaster.ReadAndDownloadEmails(lstMailBoxConfiguration[i]);
});

ThreadedLogs.Clear();

【讨论】:

  • 我需要在配置文件中更改 log4net 设置吗
  • 您的代码效率低下。难以阅读,并可能导致死锁。如果这只是概念验证,那么您应该在回答中明确说明。
猜你喜欢
  • 2012-03-26
  • 1970-01-01
  • 2020-08-05
  • 2011-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
相关资源
最近更新 更多