Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 如何为log4net提供自己的时间戳_Logging_Log4net - Fatal编程技术网

Logging 如何为log4net提供自己的时间戳

Logging 如何为log4net提供自己的时间戳,logging,log4net,Logging,Log4net,我试图提供一个使用队列系统和计时器的记录器,以减少主线程上的日志记录时间。但是,我希望捕获创建日志消息的时间,而不是日志消息的写入时间。虽然我可以将时间戳添加到消息中,但我希望该选项能够向log4net提供时间戳,以便我可以使用模式提供程序格式化写入的日志消息 如果无法提供时间戳值。一种在记录之前轻松格式化消息模式的方法将非常有用 例如: <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" /> -->201

我试图提供一个使用队列系统和计时器的记录器,以减少主线程上的日志记录时间。但是,我希望捕获创建日志消息的时间,而不是日志消息的写入时间。虽然我可以将时间戳添加到消息中,但我希望该选项能够向log4net提供时间戳,以便我可以使用模式提供程序格式化写入的日志消息

如果无法提供时间戳值。一种在记录之前轻松格式化消息模式的方法将非常有用

例如:

<param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />


-->2011-12-1700:00:38511[TestRunnerThread]调试GlobalLogger12:00:38.411400-第1行

当您查看log4net实现内部时,您将看到时间戳不是在appender编写日志时创建的,而是在构建LoggingEvent实例时创建的。在log4net的抽象Logger类中,创建了一个新的LoggingEvent实例,其中包含一个设置为DateTime.Now的时间戳。您可以在appender中使用此时间戳。

现在可能有点晚了,但是有一个示例异步appender的代码。

手动分配时间戳的原因是我实现了一个排队系统。在排队系统中,记录事件使用计时器完成,当前为100ms。在使用队列系统进行了一些测试之后,我发现我提供的时间戳与来自log4net的时间戳相比可以是200ms+。这可以从我在文章中给出的示例中看出,该示例显示了100ms的差异。这意味着您首先对日志消息进行排队,并在某些时候批量登录到log4net?您没有实现appender吗?appender方法将是这种队列实现的“正确方法”…您是对的,我实现了一个批处理记录器,如果日志消息在队列中,它将以一定的间隔追加到log4net。我将研究创建自己的appender,因为这听起来确实是一个更好的方法。谢谢你的提示,出于某种原因,我没有想到要走那条路线。请在链接中发布一个简短的解释。将来链接可能会断开,但您的答案可能仍然有用!现在是。。。破碎的