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

时间:2010-05-21 21:49:07

标签: java c++ python logging

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

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

谢谢!

3 个答案:

答案 0 :(得分:5)

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

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

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

<强>更新

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

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

答案 1 :(得分:1)

Apache有cross-platform logging libraries,允许您使用类似的API从各种编程语言登录。不幸的是,他们没有Python API,但你应该能够使用log4cpp和Boost.Python来提升它。

我正在处理的项目使用其中一个库来登录数据库,这允许我们使用集中放置日志消息的“分布式日志记录”。我不得不承认我不是这个的粉丝。我工作的另一个项目使用其中一个库来登录本机日志记录工具。 Windows事件日志具有一些用于分布式日志记录的功能,但AFAIK syslog没有。

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

答案 2 :(得分:1)

我使用 Apache log4cxx或Apache log4j 。 这是高效的。它具有Logger层次结构来模块化您的日志。它已经证明了一段时间的技术。 目前,存在控制台,文件,GUI组件,远程套接字服务器,NT事件记录器和远程UNIX Syslog守护程序的appender。也可以异步记录。

如何支持分布式日志记录? 例如,使用远程套接字服务器appender。