• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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">&nbsp;&nbsp;</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 &amp;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 ">&nbsp;&nbsp;</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 &amp;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 ">&nbsp;&nbsp;</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 &amp;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 ">&nbsp;&nbsp;</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 &amp;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 ">&nbsp;&nbsp;</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 &amp;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 ">&nbsp;&nbsp;</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 ">&nbsp;&nbsp;</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 &amp;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 ">&nbsp;&nbsp;</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 &amp;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 ">&nbsp;&nbsp;</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 &amp;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 ">&nbsp;&nbsp;</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 &amp;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 ">&nbsp;&nbsp;</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 &amp;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 ">&nbsp;&nbsp;</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