1# HiLog开发指导<a name="ZH-CN_TOPIC_0000001185655870"></a> 2 3- [概述](#section8154107175019) 4- [接口说明](#section6748124155012) 5- [开发实例](#section102728581536) 6 - [C使用示例](#section12916224185417) 7 - [C++使用示例](#section19399185610547) 8 9 10## 概述<a name="section8154107175019"></a> 11 12HiLog是OpenHarmony日志系统,提供给系统框架、服务、以及应用打印日志,记录用户操作、系统运行状态等。 13 14本章节内容对标准系统类设备(参考内存≥128MB)适用。 15 16## 接口说明<a name="section6748124155012"></a> 17 18**表 1** C++、C的函数接口 19 20<a name="table94501354193619"></a> 21<table><thead align="left"><tr id="row954285483614"><th class="cellrowborder" valign="top" width="18.258174182581744%" id="mcps1.2.4.1.1"><p id="p16542254203611"><a name="p16542254203611"></a><a name="p16542254203611"></a><strong id="b17542185414366"><a name="b17542185414366"></a><a name="b17542185414366"></a>C++</strong></p> 22</th> 23<th class="cellrowborder" valign="top" width="43.39566043395661%" id="mcps1.2.4.1.2"> </th> 24<th class="cellrowborder" valign="top" width="38.34616538346165%" id="mcps1.2.4.1.3"><p id="p185431554163619"><a name="p185431554163619"></a><a name="p185431554163619"></a><strong id="b175431054123617"><a name="b175431054123617"></a><a name="b175431054123617"></a>C</strong></p> 25</th> 26</tr> 27</thead> 28<tbody><tr id="row954305418361"><td class="cellrowborder" valign="top" width="18.258174182581744%" headers="mcps1.2.4.1.1 "><p id="p3543754183618"><a name="p3543754183618"></a><a name="p3543754183618"></a><strong id="b45431554113615"><a name="b45431554113615"></a><a name="b45431554113615"></a>类</strong></p> 29</td> 30<td class="cellrowborder" valign="top" width="43.39566043395661%" headers="mcps1.2.4.1.2 "><p id="p10544105453610"><a name="p10544105453610"></a><a name="p10544105453610"></a><strong id="b22281259122314"><a name="b22281259122314"></a><a name="b22281259122314"></a>方法</strong></p> 31</td> 32<td class="cellrowborder" valign="top" width="38.34616538346165%" headers="mcps1.2.4.1.3 "><p id="p17969916192614"><a name="p17969916192614"></a><a name="p17969916192614"></a><strong id="b1654320344267"><a name="b1654320344267"></a><a name="b1654320344267"></a>方法/宏</strong></p> 33</td> 34</tr> 35<tr id="row8544115410361"><td class="cellrowborder" valign="top" width="18.258174182581744%" headers="mcps1.2.4.1.1 "><p id="p16544154183615"><a name="p16544154183615"></a><a name="p16544154183615"></a>HiLog</p> 36</td> 37<td class="cellrowborder" valign="top" width="43.39566043395661%" headers="mcps1.2.4.1.2 "><p id="p1326662513016"><a name="p1326662513016"></a><a name="p1326662513016"></a>int Debug(const HiLogLabel &label, const char *fmt, ...)</p> 38</td> 39<td class="cellrowborder" valign="top" width="38.34616538346165%" headers="mcps1.2.4.1.3 "><p id="p18697644105619"><a name="p18697644105619"></a><a name="p18697644105619"></a>HILOG_DEBUG(type, ...)</p> 40</td> 41</tr> 42<tr id="row754495418366"><td class="cellrowborder" valign="top" width="18.258174182581744%" headers="mcps1.2.4.1.1 "> </td> 43<td class="cellrowborder" valign="top" width="43.39566043395661%" headers="mcps1.2.4.1.2 "><p id="p86951544155610"><a name="p86951544155610"></a><a name="p86951544155610"></a>int Info(const HiLogLabel &label, const char *fmt, ...)</p> 44</td> 45<td class="cellrowborder" valign="top" width="38.34616538346165%" headers="mcps1.2.4.1.3 "><p id="p96931344145615"><a name="p96931344145615"></a><a name="p96931344145615"></a>HILOG_INFO(type, ...)</p> 46</td> 47</tr> 48<tr id="row95441954113614"><td class="cellrowborder" valign="top" width="18.258174182581744%" headers="mcps1.2.4.1.1 "> </td> 49<td class="cellrowborder" valign="top" width="43.39566043395661%" headers="mcps1.2.4.1.2 "><p id="p1769224485619"><a name="p1769224485619"></a><a name="p1769224485619"></a>int Warn(const HiLogLabel &label, const char *fmt, ...)</p> 50</td> 51<td class="cellrowborder" valign="top" width="38.34616538346165%" headers="mcps1.2.4.1.3 "><p id="p1969194465613"><a name="p1969194465613"></a><a name="p1969194465613"></a>HILOG_WARN(type, ...)</p> 52</td> 53</tr> 54<tr id="row45448547369"><td class="cellrowborder" valign="top" width="18.258174182581744%" headers="mcps1.2.4.1.1 "> </td> 55<td class="cellrowborder" valign="top" width="43.39566043395661%" headers="mcps1.2.4.1.2 "><p id="p4748102365615"><a name="p4748102365615"></a><a name="p4748102365615"></a>int Error(const HiLogLabel &label, const char *fmt, ...)</p> 56</td> 57<td class="cellrowborder" valign="top" width="38.34616538346165%" headers="mcps1.2.4.1.3 "><p id="p15747142375613"><a name="p15747142375613"></a><a name="p15747142375613"></a>HILOG_ERROR(type, ...)</p> 58</td> 59</tr> 60<tr id="row12545125453610"><td class="cellrowborder" valign="top" width="18.258174182581744%" headers="mcps1.2.4.1.1 "> </td> 61<td class="cellrowborder" valign="top" width="43.39566043395661%" headers="mcps1.2.4.1.2 "><p id="p5745132318560"><a name="p5745132318560"></a><a name="p5745132318560"></a>int Fatal(const HiLogLabel &label, const char *fmt, ...)</p> 62</td> 63<td class="cellrowborder" valign="top" width="38.34616538346165%" headers="mcps1.2.4.1.3 "><p id="p107441123175615"><a name="p107441123175615"></a><a name="p107441123175615"></a>HILOG_FATAL(type, ...)</p> 64</td> 65</tr> 66<tr id="row1454565433611"><td class="cellrowborder" valign="top" width="18.258174182581744%" headers="mcps1.2.4.1.1 "> </td> 67<td class="cellrowborder" valign="top" width="43.39566043395661%" headers="mcps1.2.4.1.2 "><p id="p1574242345618"><a name="p1574242345618"></a><a name="p1574242345618"></a>NA</p> 68</td> 69<td class="cellrowborder" valign="top" width="38.34616538346165%" headers="mcps1.2.4.1.3 "><p id="p197416239562"><a name="p197416239562"></a><a name="p197416239562"></a>int HiLogPrint(LogType type, LogLevel level, unsigned int domain, const char *tag, const char *fmt, ...)</p> 70</td> 71</tr> 72<tr id="row165451854193617"><td class="cellrowborder" valign="top" width="18.258174182581744%" headers="mcps1.2.4.1.1 "> </td> 73<td class="cellrowborder" valign="top" width="43.39566043395661%" headers="mcps1.2.4.1.2 "><p id="p64411913343"><a name="p64411913343"></a><a name="p64411913343"></a>boolean IsLoggable(unsigned int domain, const char *tag, LogLevel level)</p> 74</td> 75<td class="cellrowborder" valign="top" width="38.34616538346165%" headers="mcps1.2.4.1.3 "><p id="p107388238561"><a name="p107388238561"></a><a name="p107388238561"></a>bool HiLogIsLoggable(unsigned int domain, const char *tag, LogLevel level)</p> 76</td> 77</tr> 78<tr id="row154535415367"><td class="cellrowborder" valign="top" width="18.258174182581744%" headers="mcps1.2.4.1.1 "><p id="p795821952317"><a name="p795821952317"></a><a name="p795821952317"></a>HiLogLabel</p> 79</td> 80<td class="cellrowborder" valign="top" width="43.39566043395661%" headers="mcps1.2.4.1.2 "><p id="p20464133712224"><a name="p20464133712224"></a><a name="p20464133712224"></a>struct HiLogLabel</p> 81</td> 82<td class="cellrowborder" valign="top" width="38.34616538346165%" headers="mcps1.2.4.1.3 "><p id="p1360616314276"><a name="p1360616314276"></a><a name="p1360616314276"></a>LOG_DOMAIN</p> 83<p id="p4698145992513"><a name="p4698145992513"></a><a name="p4698145992513"></a>LOG_TAG</p> 84</td> 85</tr> 86</tbody> 87</table> 88 89**表 2** C++接口说明函数参数和功能 90 91<a name="table19597131833715"></a> 92<table><thead align="left"><tr id="row7839141817375"><th class="cellrowborder" valign="top" width="8.27%" id="mcps1.2.4.1.1"><p id="p383919182379"><a name="p383919182379"></a><a name="p383919182379"></a><strong id="b0839191863717"><a name="b0839191863717"></a><a name="b0839191863717"></a>类</strong></p> 93</th> 94<th class="cellrowborder" valign="top" width="31.41%" id="mcps1.2.4.1.2"><p id="p168392018203711"><a name="p168392018203711"></a><a name="p168392018203711"></a><strong id="b4208111244510"><a name="b4208111244510"></a><a name="b4208111244510"></a>方法</strong></p> 95</th> 96<th class="cellrowborder" valign="top" width="60.31999999999999%" id="mcps1.2.4.1.3"><p id="p168391618193717"><a name="p168391618193717"></a><a name="p168391618193717"></a><strong id="b521141218453"><a name="b521141218453"></a><a name="b521141218453"></a>描述</strong></p> 97</th> 98</tr> 99</thead> 100<tbody><tr id="row383911183378"><td class="cellrowborder" valign="top" width="8.27%" headers="mcps1.2.4.1.1 "><p id="p10839318133713"><a name="p10839318133713"></a><a name="p10839318133713"></a>HiLog</p> 101</td> 102<td class="cellrowborder" valign="top" width="31.41%" headers="mcps1.2.4.1.2 "><p id="p12483951497"><a name="p12483951497"></a><a name="p12483951497"></a>int Debug(const HiLogLabel &label, const char *fmt, ...)</p> 103</td> 104<td class="cellrowborder" valign="top" width="60.31999999999999%" headers="mcps1.2.4.1.3 "><p id="p684013182375"><a name="p684013182375"></a><a name="p684013182375"></a>功能:输出 debug 级别日志。</p> 105<p id="p1384081812377"><a name="p1384081812377"></a><a name="p1384081812377"></a>输入参数:</p> 106<a name="ul169441595136"></a><a name="ul169441595136"></a><ul id="ul169441595136"><li>label:用于标识输出日志的类型、业务领域、TAG。</li><li>format:常量格式字符串,包含参数类型、隐私标识。未加隐私标识的缺省为隐私参数。</li><li>fmt:格式化变参描述字符串。</li></ul> 107<p id="p591585615123"><a name="p591585615123"></a><a name="p591585615123"></a>输出参数:无</p> 108<p id="p1620144161310"><a name="p1620144161310"></a><a name="p1620144161310"></a>返回值:大于等于0,成功;小于0,失败。</p> 109</td> 110</tr> 111<tr id="row16840101803720"><td class="cellrowborder" valign="top" width="8.27%" headers="mcps1.2.4.1.1 "> </td> 112<td class="cellrowborder" valign="top" width="31.41%" headers="mcps1.2.4.1.2 "><p id="p482832616141"><a name="p482832616141"></a><a name="p482832616141"></a>int Info(const HiLogLabel &label, const char *fmt, ...)</p> 113</td> 114<td class="cellrowborder" valign="top" width="60.31999999999999%" headers="mcps1.2.4.1.3 "><p id="p9562039395"><a name="p9562039395"></a><a name="p9562039395"></a>功能:输出 info 级别日志。</p> 115<p id="p198849129150"><a name="p198849129150"></a><a name="p198849129150"></a>参数说明同 Debug 接口。</p> 116</td> 117</tr> 118<tr id="row198401818193712"><td class="cellrowborder" valign="top" width="8.27%" headers="mcps1.2.4.1.1 "> </td> 119<td class="cellrowborder" valign="top" width="31.41%" headers="mcps1.2.4.1.2 "><p id="p1705727151413"><a name="p1705727151413"></a><a name="p1705727151413"></a>int Warn(const HiLogLabel &label, const char *fmt, ...)</p> 120</td> 121<td class="cellrowborder" valign="top" width="60.31999999999999%" headers="mcps1.2.4.1.3 "><p id="p873814715151"><a name="p873814715151"></a><a name="p873814715151"></a>功能:输出 warn 级别日志。</p> 122<p id="p17738847151515"><a name="p17738847151515"></a><a name="p17738847151515"></a>参数说明同 Debug 接口。</p> 123</td> 124</tr> 125<tr id="row118401118203714"><td class="cellrowborder" valign="top" width="8.27%" headers="mcps1.2.4.1.1 "> </td> 126<td class="cellrowborder" valign="top" width="31.41%" headers="mcps1.2.4.1.2 "><p id="p55044284141"><a name="p55044284141"></a><a name="p55044284141"></a>int Error(const HiLogLabel &label, const char *fmt, ...)</p> 127</td> 128<td class="cellrowborder" valign="top" width="60.31999999999999%" headers="mcps1.2.4.1.3 "><p id="p1558516489153"><a name="p1558516489153"></a><a name="p1558516489153"></a>功能:输出 error 级别日志。</p> 129<p id="p1558534841512"><a name="p1558534841512"></a><a name="p1558534841512"></a>参数说明同 Debug 接口。</p> 130</td> 131</tr> 132<tr id="row3840171813374"><td class="cellrowborder" valign="top" width="8.27%" headers="mcps1.2.4.1.1 "> </td> 133<td class="cellrowborder" valign="top" width="31.41%" headers="mcps1.2.4.1.2 "><p id="p8306152914144"><a name="p8306152914144"></a><a name="p8306152914144"></a>int Fatal(const HiLogLabel &label, const char *fmt, ...)</p> 134</td> 135<td class="cellrowborder" valign="top" width="60.31999999999999%" headers="mcps1.2.4.1.3 "><p id="p625734912152"><a name="p625734912152"></a><a name="p625734912152"></a>功能:输出 fatal 级别日志。</p> 136<p id="p1125712491157"><a name="p1125712491157"></a><a name="p1125712491157"></a>参数说明同 Debug 接口。</p> 137</td> 138</tr> 139<tr id="row6840818193716"><td class="cellrowborder" valign="top" width="8.27%" headers="mcps1.2.4.1.1 "> </td> 140<td class="cellrowborder" valign="top" width="31.41%" headers="mcps1.2.4.1.2 "><p id="p421952291617"><a name="p421952291617"></a><a name="p421952291617"></a>boolean IsLoggable(unsigned int domain, const char *tag, LogLevel level)</p> 141</td> 142<td class="cellrowborder" valign="top" width="60.31999999999999%" headers="mcps1.2.4.1.3 "><p id="p3722152951615"><a name="p3722152951615"></a><a name="p3722152951615"></a>功能:检查指定业务领域、TAG、级别的日志是否可以打印。</p> 143<p id="p117221929201613"><a name="p117221929201613"></a><a name="p117221929201613"></a>输入参数:</p> 144<a name="ul1372214296164"></a><a name="ul1372214296164"></a><ul id="ul1372214296164"><li>domain:指定日志业务领域。</li><li>tag: 指定日志TAG。</li><li>level: 指定日志level。</li></ul> 145<p id="p572242911167"><a name="p572242911167"></a><a name="p572242911167"></a>输出参数:无</p> 146<p id="p6722162991617"><a name="p6722162991617"></a><a name="p6722162991617"></a>返回值:如果指定domain、tag、level日志可以打印则返回true;否则返回false。</p> 147</td> 148</tr> 149<tr id="row15841191813371"><td class="cellrowborder" valign="top" width="8.27%" headers="mcps1.2.4.1.1 "><p id="p98771141182714"><a name="p98771141182714"></a><a name="p98771141182714"></a>HiLogLabel</p> 150</td> 151<td class="cellrowborder" valign="top" width="31.41%" headers="mcps1.2.4.1.2 "><p id="p137234972715"><a name="p137234972715"></a><a name="p137234972715"></a>struct HiLogLabel</p> 152</td> 153<td class="cellrowborder" valign="top" width="60.31999999999999%" headers="mcps1.2.4.1.3 "><p id="p48419181372"><a name="p48419181372"></a><a name="p48419181372"></a>功能:初始化日志标签参数。</p> 154<p id="p335055115288"><a name="p335055115288"></a><a name="p335055115288"></a>成员参数:</p> 155<a name="ul1235085115287"></a><a name="ul1235085115287"></a><ul id="ul1235085115287"><li>domain:指定日志业务领域。</li><li>tag: 指定日志TAG。</li><li>level: 指定日志level。</li></ul> 156</td> 157</tr> 158</tbody> 159</table> 160 161## 开发实例<a name="section102728581536"></a> 162 163### C使用示例<a name="section12916224185417"></a> 164 1651. 在.c源文件中,包含hilog头文件: 166 167 ``` 168 #include "hilog/log.h" 169 ``` 170 171 定义domain、tag: 172 173 ``` 174 #undef LOG_DOMAIN 175 #undef LOG_TAG 176 #define LOG_DOMAIN 0 // 标识业务领域,范围0x0~0xFFFFF 177 #define LOG_TAG "MY_TAG" 178 ``` 179 180 打印日志: 181 182 ``` 183 HILOG_INFO(LOG_CORE, "Failed to visit %{private}s, reason:%{public}d.", url, errno); 184 ``` 185 1862. 编译设置,在BUILD.gn里增加子系统SDK依赖: 187 188 ``` 189 external_deps = [ "hiviewdfx_hilog_native:libhilog" ] 190 ``` 191 192 193### C++使用示例<a name="section19399185610547"></a> 194 1951. 在.h类定义头文件中,包含hilog头文件: 196 197 ``` 198 #include "hilog/log.h" 199 ``` 200 201 如果类头文件中需要日志打印,在头文件中类定义起始处 定义 LABEL: 202 203 ``` 204 class MyClass { 205 static constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, 0, "MY_TAG"}; 206 ...... 207 } 208 ``` 209 210 如果类头文件中没有日志打印,在类实现文件中 定义 LABEL: 211 212 ``` 213 using namespace OHOS::HiviewDFX; 214 static constexpr HiLogLabel LABEL = {LOG_CORE, 0, "MY_TAG"}; 215 ``` 216 217 打印日志: 218 219 ``` 220 HiLog::Info(LABEL, "Failed to visit %{private}s, reason:%{public}d.", url, errno); 221 ``` 222 2232. 编译设置,在BUILD.gn里增加子系统SDK依赖: 224 225 ``` 226 external_deps = [ "hiviewdfx:libhilog" ] 227 ``` 228 229 230