是否有C的日志库? (比如log4j for C)

时间:2013-07-19 08:11:04

标签: c logging log4j

我已经在Java工作了很长时间,我已经被认为使用log4j库来记录日志。这是一个很棒的,现在我正在转向C我想找到一个类似的库,用于这种语言的日志。

3 个答案:

答案 0 :(得分:21)

到目前为止,我知道以下用于记录的库:log4c,sclog4c,syslog,zlog。

log4c

log4c 被发明为C的Log4J。如果你专门寻找像Log4J"因为你希望它像" Log4J",这很可能是你正在寻找的。

链接

sclog4c

发现sclog4c与java.util.logging最常用的功能一样简单 - 尽可能简单。如果您正在寻找像Log4J"因为你希望它尽可能小而简单,这很可能是你正在寻找的。

链接

的syslog

syslog最初由Eric Allman开发,作为sendmail的一部分,已成为POSIX环境中守护程序/服务器日志记录的事实标准。它基于客户端 - 服务器,通常需要记录某些内容的守护程序会将日志数据发送到在UDP端口514上侦听的syslogd。 如果您特意寻找像Log4J"因为您实际上想要记录守护程序或服务器,这很可能是您正在寻找的。

链接

zlog

这个被发明成像log4c,只是 - 根据它的描述 - 同时更小,更灵活。

链接

权力与精益

由于C链接,思考和工作的方式不同,我不会寻找在一般情况下功能强大的日志框架 - 与Java不同。如果您正在寻找全面的桌面应用程序"除此之外,使用Java等强大的框架进行日志记录当然是一种很好的方法。如果您正在实施命令行工具或类似工具,我敢打赌 精益框架更好 - 为什么你只想为了记录而依赖lib2xml ......

速度

如果速度相应。由于某种原因,不浪费周期对你很重要,寻找一个日志框架,它在评估其他参数之前使用宏来评估日志级别。

缺点是您无法使用具有副作用的参数调用日志例程。但无论如何,这不应该是一个用例。如果由于包含副作用而无法忽略日志语句,那将是惊人的。

好处是,这样一个框架中的日志语句添加的循环很少,几乎不存在 - 只需访问全局,检查和条件分支,跳过其余的日志代码 - 2指令,在当今许多CPU的最佳情况下,1个周期。

声明

我是sclog4c的作者。

答案 1 :(得分:3)

有一个log4c C库模仿log4j Java库。从log4c文档:

  

它是在Log for Java库保持尽可能接近它们之后建模的   API是合理的。

答案 2 :(得分:2)

另一个需要考虑的选择是zf_log

  • 在发布版本(编译出来)中将调试日志记录简化为no-op
  • 未记录消息时不评估参数
  • 否"未使用"仅对日志语句中使用的变量发出警告
  • 将内存区域记录为HEX和ASCII
  • Android日志和Apple系统日志(iOS,OS X)的可选内置支持
  • 自定义输出功能(文件,系统日志等)

例如,这将输出INFO日志消息:

ZF_LOGI("Number of arguments: %i", argc);

看起来像:

04-29 22:43:20.244 40059  1299 I hello.MAIN main@hello.c:9 Number of arguments: 1

精确表示是可配置的,取决于构建类型(调试/发布)。