HiLog 模块
1. 模块概述
源码:https://gitee.com/openharmony/hiviewdfx_hilog
1.1 功能与目标
主要功能:
HiLog是OpenHarmony操作系统的核心日志系统,为系统框架、服务和应用程序提供统一的日志打印、记录和管理功能。
核心目标:
- 提供高效、可靠的日志记录机制
- 支持多种日志类型(APP、CORE、INIT、KMSG)
- 实现日志的分级管理(DEBUG/INFO/WARN/ERROR/FATAL)
- 提供日志流控机制,防止日志打印过载
- 支持日志落盘和压缩存储
- 提供隐私保护机制
使用场景:
- 应用程序运行状态记录
- 系统框架调试信息输出
- 用户操作行为追踪
- 系统异常和错误记录
- 性能分析和问题定位
1.2 系统位置
HiLog模块位于OpenHarmony DFX(Design For X)子系统中,是系统基础设施的核心组件。
角色定位:
- 核心模块:为整个系统提供日志基础设施
- 服务提供者:通过hilogd常驻服务提供日志收集和管理
- 工具提供者:通过hilog命令行工具提供日志查询和控制
与其他模块的关系:
- 依赖模块:bounds_checking_function、c_utils、ffrt、init、napi、zlib、runtime_core
- 被依赖模块:几乎所有OpenHarmony子系统和应用
1.3 设计思路与模式
设计思路
客户端-服务端架构:采用C/S架构,客户端(应用进程)通过日志API发送日志,服务端(hilogd)负责收集、存储和管理日志。
环形缓冲区设计:使用Ring Buffer存储日志,实现高效的日志写入和读取。
Socket通信机制:使用Unix Domain Socket实现进程间通信,确保日志传输的可靠性。
分层架构:
- 接口层:提供C/C++/JS/Rust多语言接口
- 框架层:实现日志格式化和传输逻辑
- 服务层:hilogd服务端实现日志管理
设计模式
| 设计模式 | 应用场景 | 说明 |
|---|---|---|
| 单例模式 | LogKmsg | 内核日志收集器使用单例确保唯一实例 |
| 工厂模式 | LogCompress | 根据压缩类型创建不同的压缩器实例 |
| 观察者模式 | HilogBuffer | 通过回调通知新日志数据到达 |
| 策略模式 | LogCompress | 支持不同压缩算法(None/Zlib/Zstd) |
| 模板方法模式 | Socket | 定义Socket通信的基本流程 |
1.4 系统框图
2. 模块结构
2.1 源文件与头文件
2.1.1 接口层 (interfaces/)
| 文件路径 | 功能描述 |
|---|---|
interfaces/native/innerkits/include/hilog/log.h | 主头文件,包含C和C++接口 |
interfaces/native/innerkits/include/hilog/log_c.h | C语言日志接口定义 |
interfaces/native/innerkits/include/hilog/log_cpp.h | C++日志接口定义 |
interfaces/native/innerkits/include/hilog_base/log_base.h | 基础日志接口 |
interfaces/native/innerkits/include/hilog_trace.h | 日志追踪接口 |
interfaces/rust/src/lib.rs | Rust语言绑定 |
interfaces/js/kits/napi/ | JavaScript NAPI接口 |
2.1.2 框架层 (frameworks/)
| 文件路径 | 功能描述 |
|---|---|
frameworks/libhilog/hilog.cpp | HiLog C++类实现 |
frameworks/libhilog/hilog_printf.cpp | 日志格式化打印实现 |
frameworks/libhilog/base/hilog_base.c | 基础日志功能实现 |
frameworks/libhilog/include/hilog_common.h | 公共定义和常量 |
frameworks/libhilog/include/hilog_cmd.h | 命令和协议定义 |
frameworks/libhilog/vsnprintf/vsnprintf_s_p.c | 安全格式化函数 |
frameworks/libhilog/param/properties.cpp | 属性配置管理 |
frameworks/libhilog/socket/*.cpp | Socket通信实现 |
frameworks/libhilog/utils/*.cpp | 工具函数 |
2.1.3 服务层 (services/)
hilogd服务:
| 文件路径 | 功能描述 |
|---|---|
services/hilogd/main.cpp | 服务入口 |
services/hilogd/service_controller.cpp | 服务控制器 |
services/hilogd/log_collector.cpp | 日志收集器 |
services/hilogd/log_buffer.cpp | 环形缓冲区实现 |
services/hilogd/log_persister.cpp | 日志持久化 |
services/hilogd/log_compress.cpp | 日志压缩 |
services/hilogd/flow_control.cpp | 流量控制 |
services/hilogd/log_stats.cpp | 统计信息 |
services/hilogd/log_kmsg.cpp | 内核日志收集 |
services/hilogd/cmd_executor.cpp | 命令执行器 |
hilog工具:
| 文件路径 | 功能描述 |
|---|---|
services/hilogtool/main.cpp | 工具入口和命令处理 |
services/hilogtool/log_display.cpp | 日志显示格式化 |
2.2 类、结构体、函数与方法
2.2.1 核心枚举类型
// 日志类型 (log_c.h)typedefenum{LOG_TYPE_MIN=0,LOG_APP=0,// 应用日志LOG_INIT=1,// 启动阶段日志LOG_CORE=3,// 核心服务/框架日志LOG_KMSG=4,// 内核日志LOG_ONLY_PRERELEASE=5,// 仅预发布版本LOG_TYPE_MAX}LogType;// 日志级别 (log_c.h)typedefenum{LOG_LEVEL_MIN=0,LOG_DEBUG=3,// 调试信息LOG_INFO=4,// 一般信息LOG_WARN=5,// 警告LOG_ERROR=6,// 错误LOG_FATAL=7,// 致命错误LOG_LEVEL_MAX,}LogLevel;// 控制命令 (hilog_cmd.h)enumclassIoctlCmd{INVALID=-1,OUTPUT_RQST=1,// 日志输出请求PERSIST_START_RQST,// 开始持久化PERSIST_STOP_RQST,// 停止持久化BUFFERSIZE_GET_RQST,// 获取缓冲区大小BUFFERSIZE_SET_RQST,// 设置缓冲区大小STATS_QUERY_RQST,// 查询统计信息// ... 更多命令};2.2.2 核心结构体
// 日志标签 (log_cpp.h)usingHiLogLabel=struct{LogType type;// 日志类型unsignedintdomain;// 域IDconstchar*tag;// 标签};// 日志消息头 (hilog_cmd.h)structMsgHeader{uint8_tver;// 版本uint8_tcmd;// 命令int16_terr;// 错误码uint16_tlen;// 长度}__attribute__((__packed__));// 日志数据 (log_data.h)structHilogData{uint16_tlen;// 数据长度uint16_tversion:3;uint16_ttype:3;// 日志类型uint16_tlevel:4;// 日志级别uint16_ttagLen:6;// 标签长度uint32_ttv_sec;// 时间戳(秒)uint32_ttv_nsec;// 时间戳(纳秒)uint32_tmono_sec;// 单调时间uint32_tpid;// 进程IDuint32_ttid;// 线程IDuint32_tdomain;// 域IDchar*tag;// 标签指针char*content;// 内容指针};// 日志过滤器 (log_filter.h)structLogFilter{uint16_ttypes;// 类型过滤uint16_tlevels;// 级别过滤boolblackDomain;// 域黑名单模式uint8_tdomainCount;// 域数量uint32_tdomains[MAX_DOMAINS];// 域列表boolblackTag;// 标签黑名单模式uint8_ttagCount;// 标签数量chartags[MAX_TAGS][MAX_TAG_LEN];// 标签列表boolblackPid;// PID黑名单模式intpidCount;// PID数量uint32_tpids[MAX_PIDS];// PID列表charregex[MAX_REGEX_STR_LEN];// 正则表达式};2.2.3 核心类
HiLog类 (C++接口)
namespaceOHOS::HiviewDFX{classHiLogfinal{public:staticintDebug(constHiLogLabel&label,constchar*fmt,...);staticintInfo(constHiLogLabel&label,constchar*fmt,...);staticintWarn(constHiLogLabel&label,constchar*fmt,...);staticintError(constHiLogLabel&label,constchar*fmt,...);staticintFatal(constHiLogLabel&label,constchar*fmt,...);};}HilogBuffer类 (环形缓冲区)
classHilogBuffer{public:usingLogMsgContainer=std::list<HilogData>;usingReaderId=uintptr_t;HilogBuffer(boolisSupportSkipLog);~HilogBuffer();size_tInsert(constHilogMsg&msg,bool&isFull);std::optional<HilogData>Query(constLogFilter&filter,constReaderId&id,inttailCount=0);ReaderIdCreateBufReader(std::function<void()>onNewDataCallback);voidRemoveBufReader(constReaderId&id);int32_tDelete(uint16_tlogType);int64_tGetBuffLen(uint16_tlogType);int32_tSetBuffLen(uint16_tlogType,uint64_tbuffSize);private:size_t sizeByType[LOG_TYPE_MAX];LogMsgContainer hilogDataList;std::shared_mutex hilogBufferMutex;std::map<ReaderId,std::shared_ptr<BufferReader>>m_logReaders;};LogCollector类 (日志收集器)
classLogCollector{public:explicitLogCollector(HilogBuffer&buffer);voidInsertDropInfo(constHilogMsg&msg,intdroppedCount);size_tInsertLogToBuffer(constHilogMsg&msg);voidonDataRecv(constucred&cred,std::vector<char>&data,intdataLen);voidSetLogFlowControl(boolon);voidSetDebuggable(boolon);private:HilogBuffer&m_hilogBuffer;boolcountEnable;boolflowControl;booldebug;};LogPersister类 (日志持久化)
classLogPersister:publicstd::enable_shared_from_this<LogPersister>{public:staticstd::shared_ptr<LogPersister>CreateLogPersister(HilogBuffer&buffer);~LogPersister();staticintKill(uint32_tid);staticintQuery(std::list<LogPersistQueryResult>&results);staticintRefresh(uint32_tid);staticvoidClear();intInit(constPersistRecoveryInfo&msg,boolrestore);intDeinit();voidStart();voidStop();private:std::unique_ptr<LogCompress>m_compressor;std::unique_ptr<LogPersisterRotator>m_fileRotator;std::thread m_persisterThread;HilogBuffer&m_hilogBuffer;};ServiceController类 (服务控制器)
classServiceController{public:staticconstexprintMAX_DATA_LEN=2048;ServiceController(std::unique_ptr<Socket>communicationSocket,LogCollector&collector,HilogBuffer&hilogBuffer,HilogBuffer&kmsgBuffer);~ServiceController();voidCommunicationLoop(std::atomic<bool>&stopLoop,constCmdList&list);private:voidHandleOutputRqst(constOutputRqst&rqst);voidHandlePersistStartRqst(constPersistStartRqst&rqst);voidHandleBufferSizeGetRqst(constBufferSizeGetRqst&rqst);voidHandleStatsQueryRqst(constStatsQueryRqst&rqst);// ... 更多处理函数std::unique_ptr<Socket>m_communicationSocket;LogCollector&m_logCollector;HilogBuffer&m_hilogBuffer;HilogBuffer&m_kmsgBuffer;};LogCompress类 (日志压缩 - 策略模式)
classLogCompress{public:LogCompress()=default;virtual~LogCompress()=default;virtualintCompress(constLogPersisterBuffer&inBuffer,LogPersisterBuffer&compressBuffer)=0;staticstd::stringCompressType2Str(uint16_tcompressType);staticuint16_tStr2CompressType(conststd::string&str);};classNoneCompress:publicLogCompress{intCompress(...)override;};classZlibCompress:publicLogCompress{intCompress(...)override;};classZstdCompress:publicLogCompress{intCompress(...)override;};Socket类 (网络通信)
classSocket{public:explicitSocket(intsocketType);~Socket();boolCloseHandler();intCreate();intWrite(constchar*data,unsignedintlen);intRead(char*buffer,unsignedintlen);protected:intsocketHandler;uint32_tsocketType;structucredsocketCred;};classSocketClient:publicSocket{public:SocketClient(std::string serverPath,uint32_tsocketType);intConnect();private:sockaddr_un serverAddr;};classSocketServer{public:SocketServer(conststd::string&socketName,uint32_tsocketType);intInit();intListen(unsignedintbacklog);intAccept();};2.2.4 核心函数
C语言接口函数
// 日志打印intHiLogPrint(LogType type,LogLevel level,unsignedintdomain,constchar*tag,constchar*fmt,...);// 日志级别检查boolHiLogIsLoggable(unsignedintdomain,constchar*tag,LogLevel level);// 设置日志回调voidLOG_SetCallback(LogCallback callback);// 设置最低日志级别voidHiLogSetAppMinLogLevel(LogLevel level);// 获取最后一条致命日志constchar*GetLastFatalMessage(void);宏定义接口
// C语言宏#defineHILOG_DEBUG(type,...)((void)HILOG_IMPL((type),LOG_DEBUG,LOG_DOMAIN,LOG_TAG,__VA_ARGS__))#defineHILOG_INFO(type,...)((void)HILOG_IMPL((type),LOG_INFO,LOG_DOMAIN,LOG_TAG,__VA_ARGS__))#defineHILOG_WARN(type,...)((void)HILOG_IMPL((type),LOG_WARN,LOG_DOMAIN,LOG_TAG,__VA_ARGS__))#defineHILOG_ERROR(type,...)((void)HILOG_IMPL((type),LOG_ERROR,LOG_DOMAIN,LOG_TAG,__VA_ARGS__))#defineHILOG_FATAL(type,...)((void)HILOG_IMPL((type),LOG_FATAL,LOG_DOMAIN,LOG_TAG,__VA_ARGS__))// C++宏#defineHiLogDebug(label,fmt,...)HILOG_IMPL(label.type,LOG_DEBUG,label.domain,label.tag,fmt,##__VA_ARGS__)#defineHiLogInfo(label,fmt,...)HILOG_IMPL(label.type,LOG_INFO,label.domain,label.tag,fmt,##__VA_ARGS__)#defineHiLogWarn(label,fmt,...)HILOG_IMPL(label.type,LOG_WARN,label.domain,label.tag,fmt,##__VA_ARGS__)#defineHiLogError(label,fmt,...)HILOG_IMPL(label.type,LOG_ERROR,label.domain,label.tag,fmt,##__VA_ARGS__)#defineHiLogFatal(label,fmt,...)HILOG_IMPL(label.type,LOG_FATAL,label.domain,label.tag,fmt,##__VA_ARGS__)2.3 类图
2.4 模块内部依赖框图
3. 模块间交互
3.1 交互描述
3.1.1 与应用进程的交互
- 通信方式:Unix Domain Socket (SOCK_DGRAM)
- Socket名称:
hilogInput - 数据格式:HilogMsg结构体
- 交互流程:应用调用HiLog API → 格式化日志 → 通过Socket发送到hilogd
3.1.2 与hilog工具的交互
- 输出Socket:
hilogOutput(用于日志查询) - 控制Socket:
hilogControl(用于配置和管理) - 通信协议:基于MsgHeader的请求-响应模式
3.1.3 与内核的交互
- 交互方式:读取
/dev/kmsg设备文件 - 数据处理:LogKmsg类解析内核日志格式并转换为HilogData
3.1.4 外部依赖
| 依赖组件 | 用途 |
|---|---|
| bounds_checking_function | 安全字符串处理函数 |
| c_utils | 基础工具函数 |
| ffrt | 并发任务调度框架 |
| init | 系统初始化和属性服务 |
| napi | Node.js Native API (JS接口) |
| zlib | 日志压缩 |
| runtime_core | 运行时核心 |
3.1.5 多线程处理
hilogd服务使用多线程架构:
| 线程 | 功能 |
|---|---|
| 主线程 | 处理日志输出请求 |
| 控制线程 | 处理配置和管理命令 |
| 日志收集线程 | 接收应用日志 |
| 持久化线程 | 日志落盘任务 |
| Kmsg线程 | 内核日志收集 |
3.2 外部依赖框图
4. 状态机转换图
4.1 状态机模型
HiLog模块包含多个状态机,主要涉及:
- hilogd服务状态机
- 日志持久化任务状态机
- 流控状态机
4.2 状态机树图
4.3 状态切换规则
4.3.1 hilogd服务状态机
| 当前状态 | 事件/条件 | 目标状态 | 动作 |
|---|---|---|---|
| Uninitialized | 系统启动 | Initializing | 初始化资源 |
| Initializing | 初始化完成 | Running | 启动服务循环 |
| Initializing | 初始化失败 | Uninitialized | 清理资源 |
| Running | 收到SIGINT | Stopping | 停止服务 |
| Running | 收到日志 | Running | 处理日志 |
| Stopping | 资源释放完成 | Uninitialized | 退出进程 |
4.3.2 日志持久化任务状态机
| 当前状态 | 事件/条件 | 目标状态 | 动作 |
|---|---|---|---|
| Idle | Start命令 | Initializing | 创建文件和压缩器 |
| Initializing | 初始化成功 | Running | 启动接收线程 |
| Initializing | 初始化失败 | Idle | 清理资源 |
| Running | 新日志到达 | Running | 写入日志 |
| Running | 缓冲区满 | Running | 压缩并写入文件 |
| Running | Refresh命令 | Refreshing | 刷新缓冲区 |
| Running | Stop命令 | Stopped | 停止线程 |
| Refreshing | 刷新完成 | Running | 继续接收 |
| Stopped | Start命令 | Initializing | 重新初始化 |
4.3.3 流控状态机
| 当前状态 | 事件/条件 | 目标状态 | 动作 |
|---|---|---|---|
| Normal | 日志量 < 阈值 | Normal | 正常处理 |
| Normal | 日志量 >= 警告阈值 | Warning | 记录警告 |
| Warning | 日志量 >= 限流阈值 | Throttling | 开始丢弃日志 |
| Warning | 日志量 < 警告阈值 | Normal | 恢复正常 |
| Throttling | 日志量 < 限流阈值 | Warning | 减少丢弃 |
| Throttling | 超时周期结束 | Normal | 重置计数 |
4.4 状态机转换图
4.4.1 hilogd服务状态机
4.4.2 日志持久化任务状态机
4.4.3 流控状态机
5. 接口设计
5.1 公共接口
5.1.1 C语言接口
HiLogPrint - 日志打印
/** * @brief 打印日志 * @param type 日志类型 (LOG_APP/LOG_CORE/LOG_INIT等) * @param level 日志级别 (LOG_DEBUG/LOG_INFO/LOG_WARN/LOG_ERROR/LOG_FATAL) * @param domain 域ID (APP: 0-0xFFFF, CORE: 0xD000000-0xD0FFFFF) * @param tag 日志标签 * @param fmt 格式化字符串 * @return 成功返回写入字节数,失败返回-1 */intHiLogPrint(LogType type,LogLevel level,unsignedintdomain,constchar*tag,constchar*fmt,...);HiLogIsLoggable - 检查日志级别
/** * @brief 检查指定域和标签的日志是否可打印 * @param domain 域ID * @param tag 日志标签 * @param level 日志级别 * @return true: 可打印, false: 不可打印 */boolHiLogIsLoggable(unsignedintdomain,constchar*tag,LogLevel level);LOG_SetCallback - 设置日志回调
/** * @brief 设置用户自定义日志处理回调 * @param callback 回调函数指针,NULL表示取消回调 * @since 11 */voidLOG_SetCallback(LogCallback callback);// 回调函数类型定义typedefvoid(*LogCallback)(constLogType type,constLogLevel level,constunsignedintdomain,constchar*tag,constchar*msg);HiLogSetAppMinLogLevel - 设置最低日志级别
/** * @brief 设置应用进程的最低日志级别 * @param level 日志级别 * @since 15 */voidHiLogSetAppMinLogLevel(LogLevel level);GetLastFatalMessage - 获取最后一条致命日志
/** * @brief 获取最后一条FATAL级别日志 * @return 日志内容字符串 */constchar*GetLastFatalMessage(void);5.1.2 C++接口
HiLog类静态方法
namespaceOHOS::HiviewDFX{classHiLogfinal{public:/** * @brief 打印DEBUG级别日志 * @param label 日志标签结构体 * @param fmt 格式化字符串 * @return 成功返回写入字节数,失败返回-1 */staticintDebug(constHiLogLabel&label,constchar*fmt,...);/** * @brief 打印INFO级别日志 */staticintInfo(constHiLogLabel&label,constchar*fmt,...);/** * @brief 打印WARN级别日志 */staticintWarn(constHiLogLabel&label,constchar*fmt,...);/** * @brief 打印ERROR级别日志 */staticintError(constHiLogLabel&label,constchar*fmt,...);/** * @brief 打印FATAL级别日志 */staticintFatal(constHiLogLabel&label,constchar*fmt,...);};}5.1.3 宏接口
C语言宏
// 使用前需定义 LOG_DOMAIN 和 LOG_TAG#defineLOG_DOMAIN0x0001#defineLOG_TAG"MyModule"// 日志打印宏HILOG_DEBUG(LOG_CORE,"Debug message: %{public}d",value);HILOG_INFO(LOG_CORE,"Info message: %{public}s",str);HILOG_WARN(LOG_CORE,"Warning message");HILOG_ERROR(LOG_CORE,"Error message: %{private}s",privateData);HILOG_FATAL(LOG_CORE,"Fatal error!");C++宏
// 定义日志标签constexprHiLogLabel LABEL={LOG_CORE,0xD001234,"MyModule"};// 日志打印宏HiLogDebug(LABEL,"Debug: %{public}d",value);HiLogInfo(LABEL,"Info: %{public}s",str);HiLogWarn(LABEL,"Warning");HiLogError(LABEL,"Error: %{private}s",data);HiLogFatal(LABEL,"Fatal!");5.2 数据交换接口
5.2.1 Socket通信协议
消息头格式
structMsgHeader{uint8_tver;// 协议版本,当前为0uint8_tcmd;// 命令类型 (IoctlCmd枚举值)int16_terr;// 错误码uint16_tlen;// 数据长度}__attribute__((__packed__));日志输出请求/响应
// 请求structOutputRqst{uint16_theadLines;// 显示头部行数uint16_ttypes;// 日志类型过滤uint16_tlevels;// 日志级别过滤boolblackDomain;// 域黑名单模式uint8_tdomainCount;// 域数量uint32_tdomains[MAX_DOMAINS];// 域列表boolblackTag;// 标签黑名单模式uint8_ttagCount;// 标签数量chartags[MAX_TAGS][MAX_TAG_LEN];// 标签列表boolblackPid;// PID黑名单模式intpidCount;// PID数量uint32_tpids[MAX_PIDS];// PID列表charregex[MAX_REGEX_STR_LEN];// 正则表达式boolnoBlock;// 非阻塞模式uint16_ttailLines;// 显示尾部行数}__attribute__((__packed__));// 响应structOutputRsp{uint16_tlen;// 数据长度uint8_tlevel;// 日志级别uint8_ttype;// 日志类型uint32_tpid;// 进程IDuint32_ttid;// 线程IDuint32_tdomain;// 域IDuint32_ttv_sec;// 时间戳(秒)uint32_ttv_nsec;// 时间戳(纳秒)uint32_tmono_sec;// 单调时间uint8_ttagLen;// 标签长度boolend;// 是否结束chardata[];// 标签和内容}__attribute__((__packed__));持久化任务请求/响应
// 开始持久化请求structPersistStartRqst{OutputRqst outputFilter;// 日志过滤条件uint32_tjobId;// 任务IDuint32_tfileSize;// 单文件大小uint16_tfileNum;// 文件数量charfileName[MAX_FILE_NAME_LEN];// 文件名charstream[MAX_STREAM_NAME_LEN];// 压缩算法}__attribute__((__packed__));// 停止持久化请求structPersistStopRqst{uint32_tjobId;// 任务ID (0表示停止所有)}__attribute__((__packed__));5.3 接口调用时序图
5.3.1 日志打印时序图
5.3.2 日志查询时序图
5.3.3 持久化任务启动时序图
5.3.4 hilogd服务启动时序图
附录
A. 常量定义
| 常量名 | 值 | 说明 |
|---|---|---|
| MAX_LOG_LEN | 4096 | 单条日志最大长度 |
| MAX_TAG_LEN | 32 | 标签最大长度 |
| MAX_DOMAINS | 5 | 最大域过滤数量 |
| MAX_TAGS | 10 | 最大标签过滤数量 |
| MAX_PIDS | 5 | 最大PID过滤数量 |
| MIN_BUFFER_SIZE | 64KB | 缓冲区最小大小 |
| MAX_BUFFER_SIZE | 16MB | 缓冲区最大大小 |
| MIN_LOG_FILE_SIZE | 64KB | 日志文件最小大小 |
| MAX_LOG_FILE_SIZE | 512MB | 日志文件最大大小 |
| MIN_LOG_FILE_NUM | 2 | 最小日志文件数量 |
| MAX_LOG_FILE_NUM | 1000 | 最大日志文件数量 |
| DOMAIN_OS_MIN | 0xD000000 | 系统域ID最小值 |
| DOMAIN_OS_MAX | 0xD0FFFFF | 系统域ID最大值 |
| DOMAIN_APP_MIN | 0x0 | 应用域ID最小值 |
| DOMAIN_APP_MAX | 0xFFFF | 应用域ID最大值 |
B. 错误码定义
| 错误码 | 值 | 说明 |
|---|---|---|
| RET_SUCCESS | 0 | 成功 |
| RET_FAIL | -1 | 失败 |
| ERR_LOG_LEVEL_INVALID | -2 | 无效的日志级别 |
| ERR_LOG_TYPE_INVALID | -3 | 无效的日志类型 |
| ERR_INVALID_RQST_CMD | -4 | 无效的请求命令 |
| ERR_DOMAIN_INVALID | -19 | 无效的域ID |
| ERR_MSG_LEN_INVALID | -21 | 无效的消息长度 |
| ERR_BUFF_SIZE_INVALID | -30 | 无效的缓冲区大小 |
| ERR_SOCKET_CLIENT_INIT_FAIL | -46 | Socket客户端初始化失败 |
C. hilog命令行参数
| 参数 | 说明 |
|---|---|
| -h, --help | 显示帮助信息 |
| -x, --exit | 非阻塞读取日志 |
| -a, --head=<n> | 显示前n行日志 |
| -z, --tail=<n> | 显示后n行日志 |
| -t, --type=<type> | 指定日志类型 |
| -L, --level=<level> | 指定日志级别 |
| -D, --domain=<domain> | 指定域ID |
| -T, --tag=<tag> | 指定标签 |
| -P, --pid=<pid> | 指定进程ID |
| -e, --regex=<expr> | 正则表达式过滤 |
| -r | 清除缓冲区日志 |
| -g | 查询缓冲区大小 |
| -G, --buffer-size=<size> | 设置缓冲区大小 |
| -s, --statistics | 查询统计信息 |
| -S | 清除统计信息 |
| -w, --write=<control> | 落盘任务控制 |
| -b, --baselevel=<level> | 设置日志级别 |
| -p, --privacy=<on/off> | 隐私开关控制 |
| -k, --kmsg=<on/off> | 内核日志开关 |
| -Q <control-type> | 流控开关控制 |