我已经在Java工作了很长时间,我已经被认为使用log4j库来记录日志。这是一个很棒的,现在我正在转向C我想找到一个类似的库,用于这种语言的日志。
答案 0 :(得分:21)
到目前为止,我知道以下用于记录的库:log4c,sclog4c,syslog,zlog。
log4c 被发明为C的Log4J。如果你专门寻找像Log4J"因为你希望它像" Log4J",这很可能是你正在寻找的。 p>
java.util.logging
最常用的功能一样简单 - 尽可能简单。如果您正在寻找像Log4J"因为你希望它尽可能小而简单,这很可能是你正在寻找的。 p>
syslog最初由Eric Allman开发,作为sendmail的一部分,已成为POSIX环境中守护程序/服务器日志记录的事实标准。它基于客户端 - 服务器,通常需要记录某些内容的守护程序会将日志数据发送到在UDP端口514上侦听的syslogd。 如果您特意寻找像Log4J"因为您实际上想要记录守护程序或服务器,这很可能是您正在寻找的。 p>
这个被发明成像log4c,只是 - 根据它的描述 - 同时更小,更灵活。
由于C链接,思考和工作的方式不同,我不会寻找在一般情况下功能强大的日志框架 - 与Java不同。如果您正在寻找全面的桌面应用程序"除此之外,使用Java等强大的框架进行日志记录当然是一种很好的方法。如果您正在实施命令行工具或类似工具,我敢打赌 精益框架更好 - 为什么你只想为了记录而依赖lib2xml ......
如果速度相应。由于某种原因,不浪费周期对你很重要,寻找一个日志框架,它在评估其他参数之前使用宏来评估日志级别。
缺点是您无法使用具有副作用的参数调用日志例程。但无论如何,这不应该是一个用例。如果由于包含副作用而无法忽略日志语句,那将是惊人的。
好处是,这样一个框架中的日志语句添加的循环很少,几乎不存在 - 只需访问全局,检查和条件分支,跳过其余的日志代码 - 2指令,在当今许多CPU的最佳情况下,1个周期。
我是sclog4c的作者。
答案 1 :(得分:3)
有一个log4c C库模仿log4j Java库。从log4c文档:
它是在Log for Java库保持尽可能接近它们之后建模的 API是合理的。
答案 2 :(得分:2)
另一个需要考虑的选择是zf_log:
例如,这将输出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
精确表示是可配置的,取决于构建类型(调试/发布)。