代码之家  ›  专栏  ›  技术社区  ›  recipriversexclusion

用于跨语言(Java、C++、Python)系统的日志库

  •  9
  • recipriversexclusion  · 技术社区  · 16 年前

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

    • 创建所有进程都可以写入的中心日志
    • 如果将来我将一些进程推送到另一个服务器上会怎么样?如何支持分布式日志记录?

    谢谢!

    3 回复  |  直到 16 年前
        1
  •  1
  •   Max Lybbert    16 年前

    阿帕奇 cross-platform logging libraries ,允许您使用类似的API从各种编程语言登录。不幸的是,它们没有python API,不过您应该能够使用log4cpp和boost.python来创建一个API。

    我所从事的一个项目使用这些库中的一个来登录到数据库,这样我们就可以“分布式日志记录”日志消息的集中位置。我得承认我不喜欢这个。我工作的另一个项目使用这些库中的一个来登录到本机日志记录设施。Windows事件日志具有分布式日志记录的一些功能,但Afaik Syslog没有。

    虽然我没有这方面的经验,但更适合的可能是 Facebook's Scribe 项目。特性集满足您的需求,包括一个PythonAPI。不幸的是,它使用的节省在Windows上不适用于C++(也就是说,节约编译器生成只在UNIX上工作的C++代码)。您可以使用Cygwin解决这个问题,但我不能保证这种方法会奏效。

        2
  •  5
  •   R Samuel Klatchko    16 年前

    我建议使用平台的本机记录器,即POSIX上的Syslog和Windows上的事件日志。

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

    我知道python在posix上附带了syscall包装器,并且在 PyWin32 extension . 我假设现在已经有人创建了Java包装器。

    更新

    关于系统日志和多个文件。Syslog支持设施的概念-通过设施,您可以将不同的日志转到不同的文件。不幸的是,设施是预先定义的;而有8个通用的设施 LOG_LOCAL0 通过 LOG_LOCAL7 不能定义任意设施。

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

        3
  •  1
  •   user347594    16 年前

    我会用 Apache log4cxx或Apache log4j . 它很有效。它有日志记录器层次结构来模块化日志。这已经被证明是一段时间的技术。 目前,控制台、文件、GUI组件、远程套接字服务器、NT事件记录器和远程UNIX系统日志守护进程都有附加程序。也可以异步记录。

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