|
ZeroErr
|
日志是一组帮助你记录程序运行状态的宏。它可以记录你的程序运行时的状态,比如函数调用,变量值,错误信息等等。 所有的数据都会被写入到文件中。
这里有五种Log等级: INFO, LOG, WARNING, ERROR, FATAL.
INFO等级的日志会在当前上下文中没有其他LOG, WARNING, ERROR, and FATAL时被丢弃。
注意:LOG FATAL 会导致程序终止
LOG_ONLY 可以让你只在某个函数,或者某个文件,或者某个模块中打印日志。
你可以使用info来打印一些信息,然后使用LOG宏来记录它们。这样可以构建更加完整的日志trace信息。
启用 ENABLE_THREAD_SAFE 时,多个线程可以向同一 LogStream 调用 LOG / WARN / ERR 等写入宏,同时由其他线程调用 flush()。 参数及时间戳在获取流锁前准备,完整记录在锁内发布;刷新也由同一把锁保护。 每个缓冲块约 64 KiB,文件输出按块合并写入,刷新后释放记录持有的参数。
高吞吐量场景可在启动工作线程之前配置:
默认的逐条刷新保留及时输出行为,但每条日志都执行刷新,吞吐量较低。 按块刷新会延迟输出;手动刷新模式会持续保留记录,占用内存随日志量增长。 setAsyncLog() 当前没有后台写入实现,刷新仍在调用线程执行。
配置(包括回调与输出目标)应在工作线程启动前完成。遍历、查询以及低层 push() / log() 返回后手动填写 info 的接口需要调用方同步。 *_EVERY_* / *_FIRST* 限频宏的计数器也仍需外部同步。 INFO 上下文经共享 stderr 打印器输出时也需要外部同步。 use_lock_free 字段为源码兼容保留,写入统一使用流锁。 自定义格式化回调在持锁时执行,不应重新写入同一个流。
启用 BUILD_TEST 后,log_concurrency 验证 1/2/4/8 个写线程、三种刷新模式、 并发刷新、跨块及析构刷新时的记录完整性。以 log_concurrency benchmark 运行可测量简化格式化下的文件吞吐量(包含最终刷新,不启动额外刷新线程)。