在并行编程中使用log4net进行日志记录的动态文件名

时间:2014-02-14 09:28:11

标签: c# log4net parallel.foreach

以下是该情景:
我有一些'消息' (数据)必须并行处理 在这些并行进程中,我想在消息特定的日志文件中记录一些内容 我尝试过很多东西,但我的日志搞砸了。

我已经写了一个小测试项目..让我们看看代码:

using System.Collections.Generic;
using System.Threading.Tasks;

namespace ParallelTest
{
    public class MessageController
    {
       public void InitiateProcesses(List<Message> messagesToProces)
       {
          MessageProcessor messageProcessor = new MessageProcessor();
          Parallel.ForEach(messagesToProces, messageProcessor.ProcessMessage);
       }
    }
}

MessageProcessor如下所示:

using log4net;

namespace ParallelTest
{
    public class MessageProcessor
    {
        public void ProcessMessage(Message message)
        {
            log4net.ThreadContext.Properties["LogName"] = message.MessageId;
            ILog log = LogManager.GetLogger("CsvLogger");
            log4net.Config.XmlConfigurator.Configure();
            log.Info(string.Format("{0} - {1}", message.MessageId, message.Body));
        }
    }
}

所以我使用log4net,这是配置:

<log4net>
  <appender name="CsvAppender" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="c:\Temp\log_%property{LogName}.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="-1" />
    <maximumFileSize value="1MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date,%message%newline" />
    </layout>
  </appender>

  <logger additivity="false" name="CsvLogger">
    <level value="ALL"/>
    <appender-ref ref="CsvAppender" />
  </logger>
</log4net>

创建了日志文件,但是..

  • 其中一些是空的
  • 其中一些已填写正确的留言记录
  • 其中一些还包含其他消息的记录

我可以在这里使用一些帮助:)

0 个答案:

没有答案