Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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 最小开销分布式事件日志库/框架?_Logging - Fatal编程技术网

Logging 最小开销分布式事件日志库/框架?

Logging 最小开销分布式事件日志库/框架?,logging,Logging,我们希望保存系统中所有重大事件的记录。例如,在数据库可能存储当前用户状态的地方,事件日志应记录对该状态的所有更改以及更改发生的时间 事件日志功能应该尽可能地为事件抛出者提供接近零的开销,应该容纳结构化信息(与文本日志消息相反),并且应该支持分布式部署(许多框抛出许多事件) 在过去的生活中,我们有一个基于UDP的系统,它工作得很好,因为我们对系统有很好的控制(最大限度地减少数据包丢失)。均匀投掷者会发射UDP数据包,这些数据包会被捕获并记录在其他盒子上。我正在寻找类似的东西,希望是开源的,现成的,

我们希望保存系统中所有重大事件的记录。例如,在数据库可能存储当前用户状态的地方,事件日志应记录对该状态的所有更改以及更改发生的时间

事件日志功能应该尽可能地为事件抛出者提供接近零的开销,应该容纳结构化信息(与文本日志消息相反),并且应该支持分布式部署(许多框抛出许多事件)

在过去的生活中,我们有一个基于UDP的系统,它工作得很好,因为我们对系统有很好的控制(最大限度地减少数据包丢失)。均匀投掷者会发射UDP数据包,这些数据包会被捕获并记录在其他盒子上。我正在寻找类似的东西,希望是开源的,现成的,并且可以部署在更通用的网络中。或者,我愿意接受关于如何构建这样的东西的建议


这应该可以跨多种语言工作,但主要针对Java和Python。PARTITICIPATING(事件抛出)应用程序会有所不同;有些是网络应用,有些是面向批量的应用。结果很可能会出现在Hadoop/HDFS/HBase中。

如果您希望使用UDP路由(您似乎对此很满意),并且Java是一个选项,那么请查看并查看它对UDP传输的支持

LoggingEvent将java.lang.Object作为消息,因此它非常通用,您可以将任何需要的数据放入其中。如果您要穿越网络,它应该(最有可能)是可序列化的,并且如果您想要UDP,它应该是一个comensurate大小(64k或更小,然后取决于传输层)。您只需在服务器端截获LoggingEvent,然后根据需要进行处理


注意,UDP appender是Log4j的配套组件,您必须自己构建它。但这并不重要。

这听起来像是一个潜在的消息传递候选(开火并忘记)。我主要是一个.NET用户,所以不知道Java的日志框架有哪些。但是我快速浏览了一下,看看是否有log4j的消息附加器(我经常使用log4net)——IBM有一篇关于它的文章,这可能会对您有所帮助


因此,不要把我的回答看作是提倡使用WebSphere MQ——请作为一个建议来考虑消息传递——这里有很多开源消息框架——只是一个例子。

< P>您可以考虑使用旧的好*NIX系统日志。它的开销非常小,主要通过UDP或本地UNIX套接字使用,但如果需要可靠的日志记录,可以使用TCP。对我的(主要是Python/Perl,但它完全不依赖于语言/平台)很有吸引力

抱歉,我不熟悉Java,但就功能而言,这似乎是我搜索过的一些不错的库:


编辑:快速谷歌搜索发现了一篇名为“”的文章,这篇文章似乎非常详细。很抱歉,我在发布时误读了它,认为它是一个*nix系统日志库,但它不是。

很好,更新了语言和基础结构信息的问题。Log4J支持结构化数据吗?我只在纯文本消息中使用过它,但我想我们可以在其中加入JSON,然后就可以完成了。LoggingEvent对象被发送(在某些情况下被序列化,因此您的消息必须是可序列化的),然后您必须在UDP接收器端截获它。但这没什么大不了的。这可能需要一点实验。编辑以反映上述答案感谢Richard,MQ系统可能是一种方式。我希望看到发送消息所需时间的最坏情况基准,因为日志记录系统对投掷者的影响尽可能小是很重要的。我假设MQ系统可能太重,但这可能是一个无效的假设。听起来你需要考虑做一些基准测试。您还应考虑其他指标,如保证交付的重要性、组件是否会在偶尔断开连接的环境中运行等。请检查: