RTU_ALL_AI/docs/public/liblog/API-liblog.md

2.8 KiB
Raw Blame History

liblog — 异步日志系统 API 参考

模块概述

liblog 是嵌入式装置专用的异步日志系统。支持 INFO/ERROR 两级日志,非阻塞写入。 首次调用自动初始化pthread_once 懒启动)。控制台支持 ANSI 彩色输出, 文件支持按大小自动轮转。

核心特性:

  • 消息池预分配10000 条消息槽位,运行时零 malloc
  • 批量消费:工作线程每次最多取 100 条,批量 I/O 减少系统调用
  • 生产者-消费者模型log_prt() 入队(生产者)→ 工作线程出队写入(消费者)
  • 文件轮转:单文件超过 10MB 自动重命名为 .1 → .2 → ... → .5

常量与宏

说明
LOG_INFO 0 INFO 级别(白色)
LOG_ERROR 1 ERROR 级别(红色)
LOG_I(fmt, ...) INFO 便捷宏(自动填充文件名/函数名/行号)
LOG_E(fmt, ...) ERROR 便捷宏

接口函数

log_init(dir)

int log_init(const char *dir);

手动初始化日志系统(可选)。首次调用 log_prt() 时会自动触发。

  • dir: 日志目录路径,NULL 则默认 /tmp/logs
  • 返回: 0 成功

log_prt(level, file, func, line, fmt, ...)

void log_prt(uint32_t level, const char *file, const char *func,
             uint32_t line, const char *fmt, ...);

核心日志函数(非阻塞)。从消息池取空闲块 → 填充时间/来源 → 入队 → 立即返回。

参数:

  • level: LOG_INFOLOG_ERROR
  • file: __FILE__(源文件名)
  • func: __FUNCTION__(函数名)
  • line: __LINE__(行号)
  • fmt, ...: printf 格式化

log_file_on / log_file_off

void log_file_on(void);
void log_file_off(void);

开启/关闭文件写入。默认关闭,通过 log_init() 开启。

log_console_on / log_console_off

void log_console_on(void);
void log_console_off(void);

开启/关闭控制台输出。默认开启。

log_flush(void)

void log_flush(void);

阻塞等待消息队列清空(所有日志写入完成)。

log_cleanup(void)

void log_cleanup(void);

停止工作线程、关闭文件句柄、释放消息池。

使用示例

#include "myLog.h"

int main(void)
{
    // 手动初始化(可选),指定日志目录
    log_init("/var/log/myapp");

    // INFO 日志
    LOG_I("系统启动完成, CPU=%.1f%%, MEM=%uMB", 45.2, 128);

    // ERROR 日志(红色输出)
    LOG_E("通讯超时: channel=%d, addr=%u", 3, 0x01);

    // 开关控制
    log_console_off();  // 关闭控制台(仅写文件)
    LOG_I("仅文件输出");
    log_console_on();

    // 清理
    log_flush();
    log_cleanup();

    return 0;
}

依赖关系

  • 依赖: liblist (消息队列链表), libfunc (进程路径获取)
  • 被依赖: 所有需要日志的模块