哪个日志库用于跨语言(Java,C++,Python)系统

rec*_*ion 11 c++ python java logging

我有一个系统,中央Java控制器启动分析过程,可以用C++,Java或Python(大多数是C++)编写.所有这些进程当前都在同一台服务器上运行.你有什么建议

  • 创建所有进程可以写入的中央日志
  • 如果将来我将一些进程推送到另一台服务器,该怎么办?我如何支持分布式日志记录?

谢谢!

R S*_*hko 5

我建议使用平台的本机记录器,它是Posix上的syslog和Windows上的事件日志.

对于C++,您可以在平台上使用本机调用.

我知道Python在Posix上附带了syscall包装器,并且在PyWin32扩展中有事件日志的包装器.我假设有人已经创建了Java包装器.

更新

关于syslog和多个文件.syslog支持设施的概念 - 通过设施,您可以将不同的日志转到不同的文件.不幸的是,设施是预定义的; 虽然有8个通用的LOG_LOCAL0,LOG_LOCAL7你不能定义任意设施.

另请注意,由syslog守护程序决定在何处为每个设施/级别路由日志消息.您可能需要调整syslog守护程序配置,以便将每个工具发送到不同的文件.


Max*_*ert 1

Apache 具有跨平台日志记录库,允许您使用类似的 API 从各种编程语言进行日志记录。不幸的是,他们没有 Python API,尽管您应该能够使用 log4cpp 和 Boost.Python 快速创建一个 API。

我从事的一个项目使用这些库之一来记录到数据库,这允许我们“分布式日志记录”并集中存放日志消息。我必须承认我不喜欢这个。我从事的另一个项目使用这些库之一来记录到本机日志记录工具。Windows 事件日志具有一些分布式日志记录功能,但据我所知 syslog 没有。

虽然我没有任何经验,但更适合的可能是Facebook 的 Scribe项目。该功能集满足您的要求,包括 Python API。不幸的是,它使用的 Thrift 不适用于 Windows 上的 C++(也就是说,Thrift 编译器生成仅适用于 UNIX 的 C++ 代码)。您也许可以使用 Cygwin 解决这个问题,但我不能保证这种方法会起作用。