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

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

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

log4c

log4c被发明为C的Log4J。如果你特别想找“像Log4J这样的东西”,因为你希望它像“Log4J”,这很可能是你正在寻找的东西。

链接

sclog4c

sclog4c被发明为与java.util.logging最常用的function一样简单 – 尽可能简单。 如果您正在寻找“像Log4J这样的东西”,因为您希望它尽可能小而简单,这很可能是您正在寻找的东西。

链接

系统日志

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

链接

zlog

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

链接

权力与精益

由于C链接,思考和工作的方式不同,我不会寻找一般情况下强大的日志框架 – 与Java不同。 如果您要使用“完整的桌面应用程序”以及更高版本,使用Java等强大的框架进行日志记录肯定是一个很好的方法。 如果您正在实现命令行工具或类似工具,我敢打赌精益框架更好 – 为什么您只想为了记录而依赖lib2xml …

速度

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

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

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

放弃

我是sclog4c的作者。

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

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

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

  • 在发布版本中,调试日志记录减少为无操作(已编译)
  • 未记录消息时不评估参数
  • 仅对日志语句中使用的变量没有“未使用”警告
  • 将内存区域记录为HEX和ASCII
  • 可选的内置支持Android日志和Apple系统日志(iOS,OS X)
  • 自定义输出function(文件,系统日志等)

例如,那将输出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 

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