使用不同的日志文件登录同一应用程序

时间:2016-03-14 11:49:00

标签: c# logging

我有一个处理任务的应用程序。 每个任务都经历过各种各样的事情。从各种队列,并行的一些东西。日志记录可以在每个方面自然发生。 我需要每个任务都有一个不同的日志文件,日志名称作为此任务的唯一ID。 我已经开始检查log4net,但看起来它不是最好的工具。 (也许是) 有没有人有这个想法,因为这种记录是在它的设计中构建的。 非常感谢你。

1 个答案:

答案 0 :(得分:1)

在我看来,记录到文件是错误的方法。我见过的大多数任务处理框架都使用结构化数据存储(例如数据库或单个结构化日志文件),因为您没有为每个任务创建文件的文件处理开销,并且可以查看多个任务的过滤任务状态。写日志。它也更具可扩展性,更容易包装界面,您可以搜索多个任务日志(“在过去一小时内找到所有关键错误),以便您可以附加下游关键警报模块。”/ p>

我最熟悉的任务引擎使用数据库来管理工作队列,因此数据库是日志记录的自然选择。我通常编写一个简单的日志记录类来输出消息,但我认为您仍然可以使用为数据库日志记录配置的log4net。

也就是说,如果您确定每个任务的文件是您想要的方法,那么Logging to an individual log file for each individual thread涵盖了为每个线程创建一个日志文件,我认为该文件应该可以转换为每个任务的日志文件。答案包括log4net配置(使用文件名中带有线程ID的模式,您可以将其作为任务ID)...

<appender name="XmlAppender" type="log4net.Appender.FileAppender">
  <file type="log4net.Util.PatternString" value="D:\Temp\Logs\%property{LogName}.log" />
  <immediateFlush value="true"/>
  <appendToFile value="true" />
  <layout type="log4net.Layout.SimpleLayout" />
</appender>

...和C#代码打开日志文件...

ILoggerRepository loggerRepository = LogManager.CreateRepository(logFileName + "Repository");
ThreadContext.Properties["LogName"] = logFileName;
log4net.Config.XmlConfigurator.Configure(loggerRepository);
ILog logger = LogManager.GetLogger(logFileName + "Repository", "ProductionLogger");

感谢上述特定代码https://stackoverflow.com/users/21682/adam