• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# hilog
2
3<!--Kit: Performance Analysis Kit-->
4<!--Subsystem: HiviewDFX-->
5<!--Owner: @liuyifeifei;@buzhenwang-->
6<!--Designer: @shenchenkai-->
7<!--Tester: @liyang2235-->
8<!--Adviser: @foryourself-->
9
10HiLog日志系统,提供给系统框架、服务、以及应用,用于打印日志,记录用户操作、系统运行状态等。开发者可以通过hilog命令行查询相关日志信息。
11
12
13## 环境要求
14
15- 根据hdc命令行工具指导,完成[环境准备](hdc.md#环境准备)。
16
17- 确保设备已正常连接,并执行hdc shell。
18
19<!--RP15-->
20## hilog概述
21
22### hilog日志生成
23
24业务代码中,如果调用了HiLog接口,那么业务运行时就会生成对应的hilog日志。
25
26### hilog日志查看
27
28- 在线查看:
29
30  使用hdc shell hilog命令在线查看日志。
31
32- 查看落盘的文件:
33
34  hilog日志默认不落盘,需要手动开启落盘任务,才会落盘到设备data/log/hilog目录下,可以使用hdc file recv data/log/hilog命令导出日志后在本地进行查看。
35
36  开启/关闭落盘任务,参考[查看和设置落盘任务](#查看和设置落盘任务)。
37
38### hilog日志格式说明
39
40```text
4104-19 17:02:14.735  5394  5394 I A03200/testTag: this is a info level hilog
42```
43
44| 第一列 | 第二列 | 第三列 | 第四列 |  第五列 | 第六列 | 第七列 |
45| -------- | -------- | -------- | -------- | -------- | -------- | -------- |
46| 日期 | 时间戳 | 进程号 | 线程号 | 日志级别 | domainID/日志tag: | 日志内容 |
47| 04-19 | 17:02:14.735 | 5394 | 5394 | I | A03200/testTag: | this is a info level hilog |
48
49> **说明:**
50>
51> 日志级别:I表示Info级别,其余级别参考[日志等级](../reference/apis-performance-analysis-kit/capi-log-h.md#loglevel)首字母。
52>
53> domainID:A03200中A表示应用日志(LOG_APP),3200表示domainID为0x3200。
54
55<!--RP15End-->
56
57## 命令行说明
58
59<!--RP18-->
60| 短选项 | 长选项 | 参数 | 说明 |
61| -------- | -------- | -------- | -------- |
62| -h | --help | - | 帮助命令。 |
63| 缺省 | 缺省 | - | 阻塞读日志,不退出。 |
64| -x | --exit | - | 非阻塞读日志,读完退出。 |
65| -a | --head | &lt;n&gt; | 只显示前&lt;n&gt;行日志。 |
66| -z | --tail | &lt;n&gt; | 只显示后&lt;n&gt;行日志。 |
67| -t | --type | &lt;type&gt; | 查看指定类型的日志。|
68|  |  | app | 查看应用日志。 |
69|  |  | core | 查看系统日志。 |
70|  |  | init | 查看启动日志。 |
71|  |  | kmsg | 查看内核日志。 |
72|  |  | only_prerelease | 查看仅在系统release版本前打印的日志,应用开发者无需关注。 |
73| -L | --level | &lt;level&gt; | 指定级别的日志,示例:-L D/I/W/E/F。 |
74| -D | --domain | &lt;domain&gt; | 指定domain。 |
75| -T | --tag | &lt;tag&gt; | 指定tag。 |
76| -P | --pid | &lt;pid&gt; | 标识不同的pid。 |
77| -e | --regex | &lt;expr&gt; | 只打印日志消息与&lt;expr&gt;匹配的行,其中&lt;expr&gt;是一个正则表达式。 |
78| -v | --format | &lt;format&gt; | 显示格式控制。 |
79|  |  | color/colour | 不同级别显示不同颜色,缺省时按照黑白颜色模式处理。 |
80|  |  | time | 显示本地时间。 |
81|  |  | epoch | 显示相对1970时间。 |
82|  |  | monotonic | 显示相对启动时间。 |
83|  |  | msec | 显示毫秒精度时间。 |
84|  |  | usec | 显示微秒精度时间。 |
85|  |  | nsec | 显示纳秒精度时间。 |
86|  |  | year | 显示将年份添加到显示的时间。 |
87|  |  | zone | 显示将本地时区添加到显示的时间。 |
88|  |  | wrap | 日志换行显示时,新行不增加时间戳等前缀。 |
89|  |  | long | 显示所有数据字段,用空格分隔信息。 |
90| -r | - | - | 清除buffer日志,配合-t指定某一类型使用,默认app和core。 |
91| -g | - | - | 查询buffer的大小,配合-t指定某一类型使用,默认app和core。 |
92| -G | --buffer-size | &lt;size&gt; | 设置指定&lt;type&gt;日志类型缓冲区的大小,配合-t指定某一类型使用,默认app和core, 可使用B/K/M为单位,范围为64K-16M。 |
93| -s | --statistics | - | 查询统计信息,需配合-t或-D使用。 |
94| -S | - | - | 清除统计信息,需配合-t或-D使用。 |
95| -w | --write | &lt;control&gt; | 落盘任务控制。 |
96|  |  | query | 落盘任务查询。 |
97|  |  | start | 落盘任务开始,命令行参数为文件名、单文件大小、落盘算法、rotate文件数目。 |
98|  |  | stop | 落盘任务停止。 |
99|  |  | refresh | 刷新缓冲区的日志到落盘文件。 |
100|  |  | clear | 删除已经落盘的日志文件。 |
101| -f | --filename | &lt;filename&gt; | 设置落盘的文件名。 |
102| -l | --length | &lt;length&gt; | 设置落盘的文件大小,需要大于等于64K。 |
103| -n | --number | &lt;number&gt; | 设置落盘文件的个数。 |
104| -m | --stream | &lt;algorithm&gt; | 落盘方式控制。 |
105|  |  | none | 无压缩方式落盘。 |
106|  |  | zlib | zlib压缩算法落盘,落盘文件为.gz。 |
107| -j | --jobid | &lt;jobid&gt; | 设置落盘任务的ID。 |
108| -p | --privacy | &lt;on/off&gt; | 支持系统调试时日志隐私开关控制。 |
109|  |  | on | 打开隐私开关,显示&lt;private&gt;。 |
110|  |  | off | 关闭隐私开关,显示明文。 |
111| -k | - | &lt;on/off&gt; | Kernel日志读取开关控制。 |
112|  |  | on | 打开读取kernel日志。 |
113|  |  | off | 关闭读取kernel日志。 |
114| -Q | - | &lt;control-type&gt; | 超限缺省配额开关控制。 |
115|  |  | pidon | 打开进程超限管控开关。 |
116|  |  | pidoff | 关闭进程超限管控开关。 |
117|  |  | domainon | 打开domain超限管控开关。 |
118|  |  | domainoff | 关闭domain超限管控开关。 |
119| -b | --baselevel | &lt;loglevel&gt; | 设置可打印日志的最低等级:D(DEBUG)/I(INFO)/W(WARN)/E(ERROR)/F(FATAL)。可以和-D、-T结合使用,设置指定日志可打印的最低等级。 |
120| - | --persist| - |配置日志级别设置命令持久化(重启设置不会丢失)。|
121<!--RP18End-->
122
123
124## 查看帮助命令
125
126```shell
127hilog -h
128```
129
130**使用样例**:
131
132```shell
133 $ hilog -h
134 Usage:
135 -h --help
136   Show all help information.
137   Show single help information with option:
138   query/clear/buffer/stats/persist/private/kmsg/flowcontrol/baselevel/domain/combo
139 Querying logs options:
140   No option performs a blocking read and keeps printing.
141   -x --exit
142     Performs a non-blocking read and exits when all logs in buffer are printed.
143   -a <n>, --head=<n>
144     Show n lines logs on head of buffer.
145   -z <n>, --tail=<n>
146     Show n lines logs on tail of buffer.
147```
148
149## **非阻塞读日志**
150
151```shell
152hilog -x
153```
154
155**使用样例**:
156
157<!--RP1-->
158   ```shell
159   $ hilog -x
160   11-15 15:51:02.087  2823  2823 I A01B05/AOD: AodClockFullScreen --> timeTextLineHeight:313.3333333333333 clockMarginTop:99
161   11-15 15:51:02.087  2823  2823 I A01B05/AOD: AodClockFullScreen --> timeFontSize:114.48717948717947
162   11-15 15:51:02.090  2823  2823 I A01B05/AOD: AodClockFullScreen --> timeTextWidth:202,timeTextHeight:292
163   11-15 15:51:02.100  2823  2823 I A01B05/AOD: ComponentUtil --> Component(ComponentId-AodClockNumber) draw complete.
164   11-15 15:51:02.110  1197  1197 E C01406/OHOS::RS: [LoadImgsbyResolution] Can't find resolution (1084 x 2412) in config file
165   11-15 15:51:02.127  1197  1197 E C01406/OHOS::RS: [LoadImgsbyResolution] Can't find resolution (1084 x 2412) in config file
166   ```
167<!--RP1End-->
168
169## **查看指定级别日志**
170
171```shell
172hilog -L D/I/W/E/F
173```
174
175**使用样例**:
176
177<!--RP2-->
178   ```shell
179   $ hilog -L E
180   08-28 09:01:25.730  2678  2678 E A00F00/AiDataService_5.10.7.320: DataChangeNotifyManager: notifyDataChange CommonEntity no valid entity to notify
181   08-28 09:01:56.058  8560  8560 E A00500/SettingsData: DB not ready request = datashare:///com.ohos.settingsdata/entry/settingsdata/SETTINGSDATA?Proxy=true&key=analysis_service_switch_on , retry after DB startup
182   08-28 09:01:56.082  8560  8560 E A00500/SettingsData: decoder failure: /data/migrate/settings_global.xml , error code:-1
183   08-28 09:01:56.082  8560  8560 E A00500/SettingsData: clearXml failed:No such file or directory, error code:13900002
184   08-28 09:01:56.083  8560  8560 E A00500/SettingsData: readText failed:No such file or directory, error code:13900002
185   08-28 09:01:56.371  8586  8586 E A00500/SettingsData: DB not ready request =    datashare:///com.ohos.settingsdata/entry/settingsdata/SETTINGSDATA?Proxy=true&key=photo_network_connection_status , retry after DB startup
186   08-28 09:01:56.408  8586  8586 E A00500/SettingsData: decoder failure: /data/migrate/settings_global.xml , error code:-1
187   ```
188<!--RP2End-->
189
190## **查看指定类型日志**
191
192```shell
193hilog -t app
194```
195
196**使用样例**:
197
198<!--RP3-->
199   ```shell
200   $ hilog -t app
201   11-15 16:04:45.903  5630  5630 I A0A5A5/Diagnosis: [DetectionFilter]820001084: switch off
202   11-15 16:04:45.905  5630  5630 I A0A5A5/Diagnosis: [DetectionFilter]847005050: frequency limit
203   11-15 16:04:45.905  5630  5630 I A0A5A5/Diagnosis: [SmartNotifyHandler]detections after filter: []
204   11-15 16:04:45.905  5630  5630 I A0A5A5/Diagnosis: [SmartNotifyHandler]no detections to detect
205   11-15 16:04:45.924  5687  5687 I A01B06/KG: MetaBalls-SystemTopPanelController --> init charging status = 3
206   ```
207<!--RP3End-->
208
209## **查看指定domain日志**
210
211```shell
212hilog -D 01B06
213```
214
215**使用样例**:
216
217<!--RP4-->
218   ```shell
219   $ hilog -D 01B06
220   11-15 16:04:54.981  5687  5687 I A01B06/KG: MetaBalls-MetaBallRenderer --> pressTime = 0 appearTime = 1731657885972
221   11-15 16:04:54.981  5687  5687 I A01B06/KG: MetaBalls-MetaBallRenderer --> backAnimator on finish
222   11-15 16:04:54.982  5687  5687 I A01B06/KG: MetaBalls-MetaBallRenderer --> setTimeout over 9s and begin animate on finish
223   11-15 16:04:55.297  5687  5687 I A01B06/KG: MetaBalls-MetaBallRenderer --> chargingTextExitAnimation onFinish
224   11-15 16:04:55.494  5687  5687 I A01B06/KG: MetaBalls-MetaBallRenderer --> uiExtension session send data success,type: exitAnimationFinish
225   ```
226<!--RP4End-->
227
228## **查看指定TAG日志**
229
230```shell
231hilog -T tag
232```
233
234**使用样例**:
235
236<!--RP5-->
237   ```shell
238   $ hilog -T SAMGR
239   08-28 09:27:59.581   610 11504 I C01800/SAMGR: CommonEventCollect save extraData 1661
240   08-28 09:27:59.581   610 11504 I C01800/SAMGR: OnReceiveEvent get action: usual.event.BATTERY_CHANGED code: 0, extraDataId 1661
241   08-28 09:27:59.582   610 11504 I C01800/SAMGR: DoEvent:4 name:usual.event.BATTERY_CHANGED value:0
242   08-28 09:27:59.582   610 11504 W C01800/SAMGR: LoadSa SA:10120 AddDeath fail,cnt:1,callpid:610
243   08-28 09:27:59.583   610 11504 I C01800/SAMGR: LoadSa SA:10120 size:1,count:1
244   08-28 09:27:59.601   610 11504 I C01800/SAMGR: Scheduler SA:10120 loading
245   08-28 09:27:59.965 11518 11518 I C01800/SAMGR: SA:10120 OpenSo spend 315ms
246   08-28 09:27:59.965   610  4064 I C01800/SAMGR: AddProc:media_analysis_service. size:75
247   ```
248<!--RP5End-->
249
250## **查看缓冲区前n行日志**
251
252```shell
253hilog -a 8
254```
255
256**使用样例**:
257
258<!--RP6-->
259   ```shell
260   $ hilog -a 8
261   11-15 16:04:08.628     0     0 I I00000/HiLog: ========Zeroth log of type: init
262   11-15 16:04:08.603   506   506 I I02C01/CustCarrierMount: MountCarrierToShared start
263   11-15 16:04:08.604   506   506 I I02C01/CustCarrierMount: success to mount carrier to shared
264   11-15 16:04:15.394   972   972 I I02C01/CustCarrierMount: UpdateCotaOpkeyLink start
265   11-15 16:04:15.396   972   972 W I02C01/CustCarrierMount: not exsit CUST_GLOBAL_CARRIER_DIR or COTA_PARAM_CARRIER_DIR
266   11-15 16:04:15.887   972   972 I I02C01/CustCarrierMount: success to update cota carrier
267   11-15 16:04:48.749  5777  5901 I A00001/HiAI_Metadata: metadata is null
268   11-15 16:04:48.749  5777  5901 I A00001/HiAI_PluginAbilityInfo: abilityInfo is null
269   ```
270<!--RP6End-->
271
272## **查看缓冲区后n行日志**
273
274```shell
275hilog -z 8
276```
277
278**使用样例**:
279
280<!--RP7-->
281   ```shell
282   $ hilog -z 8
283   11-15 16:12:19.015  1899  7867 W C01719/ffrt: 423:FFRTQosApplyForOther:244 tid 7867, Operation not permitted, ret:-1, eno:1
284   11-15 16:12:19.125  1043  1072 I C01C42/TimeService: uid: 1010 id:428551571 name:wifi_manager_service wk:0
285   11-15 16:12:19.125  1043  1072 I C01C42/TimeService: bat: -1 id:428551571 we:505225000000 mwe:512725000000
286   11-15 16:12:19.125  1043  1072 I C01C42/TimeService: typ:3 trig: 505 225000000, bt: 495230369193
287   11-15 16:12:19.125  1043  1072 I C01C42/TimeService: cb: 428551571 ret: 0
288   11-15 16:12:19.435  3086  7813 I C01719/ffrt: 45:~WorkerThread:72 to exit, qos[3]
289   11-15 16:12:19.691   800  1404 I C01713/SUSPEND_MANAGER: [(HasSpecialStateFromBgtask):759] 20020107_com.ohos.medialibrary.medialibrarydata
290   11-15 16:12:19.691   800  1404 I C01713/SUSPEND_MANAGER: [(DozeFreezeUnit):890] Doze has special:ERR_HAS_PID_EFFICIENCY_RESOURCE
291   ```
292<!--RP7End-->
293
294## **查看指定进程日志**
295
296```shell
297hilog -P pid
298```
299
300**使用样例**:
301
302<!--RP8-->
303   ```shell
304   $ hilog -P 618
305   08-28 10:19:16.872   618 17729 I C02D15/XPower: [task_52]#current system load is: 0.028767
306   08-28 10:19:23.997   618 17580 I C02D10/CpuCollector: CalculateProcessCpuStatInfos: startTime=1724811553746, endTime=1724811563996, startBootTime=47001084, endBootTime=47011335, period=10251
307   08-28 10:19:23.999   618 17580 I C02D10/CpuCollector: CollectProcessCpuStatInfos: collect process cpu statistics information size=234, isNeedUpdate=1
308   08-28 10:19:24.002   618 17580 W C01650/Rdb:  DB :
309   08-28 10:19:24.002   618 17580 W C01650/Rdb:  device: 12583051 inode: 40230 mode: 432 size: 569344 natime: Wed Aug 28 00:00:06 2024
310   08-28 10:19:24.002   618 17580 W C01650/Rdb:  smtime: Wed Aug 28 00:34:30 2024
311   08-28 10:19:24.002   618 17580 W C01650/Rdb:  sctime: Wed Aug 28 00:34:30 2024
312   ```
313<!--RP8End-->
314
315## **查看符合正则匹配关键字的日志**
316
317```shell
318hilog -e start
319```
320
321**使用样例**:
322
323<!--RP9-->
324   ```shell
325   $ hilog -e start
326   11-15 16:17:17.578   547  4504 I C01800/SAMGR: AddProc start proc:media_analysis_service spend 223ms
327   11-15 16:17:17.578   547  4504 I C01800/SAMGR: Scheduler proc:media_analysis_service handle started event
328   11-15 16:17:17.578   547  4504 I C01800/SAMGR: Scheduler proc:media_analysis_service started
329   11-15 16:17:17.580  8877  8877 I C01810/SAFWK: start tasks proc:media_analysis_service end,spend 1ms
330   11-15 16:17:17.582  8877  8877 I C01651/DataShare: [operator()()-data_share_manager_impl.cpp:134]: RecoverObs start
331   11-15 16:17:17.589  8877  8893 I C01651/DataShare: [Connect()-ams_mgr_proxy.cpp:67]: connect start, uri = ******/media
332   11-15 16:17:18.225  1155  1633 I C02943/ThermalHdi: CreateLogFile start
333   11-15 16:17:18.264  1155  1633 I C02943/ThermalHdi: CompressFile start
334   ```
335<!--RP9End-->
336
337## **查看不同显示格式的日志**
338
339```shell
340hilog -v time/color/epoch/monotonic/usec/nsec/year/zone/wrap
341```
342
343**使用样例**:
344
345显示本地时间,以毫秒为单位显示时间。
346
347<!--RP10-->
348   ```shell
349   $ hilog -v time
350   11-15 16:36:21.027  1134  1723 I C02B01/HrilExt: [NotifyToBoosterTel-(hril_manager_ext.cpp:440)] RilExt:Notify to booster tel finish
351   11-15 16:36:21.027  1134  1723 I C02B01/HrilExt: [NotifyToBoosterNet-(hril_manager_ext.cpp:450)] RilExt: HNOTI_BOOSTER_NET_IND report to booster net
352   11-15 16:36:21.027  1134  1723 I C02B01/HrilExt: [NotifyToBoosterNet-(hril_manager_ext.cpp:454)] RilExt: HNOTI_BOOSTER_NET_IND report to booster net finish
353   11-15 16:36:21.027  1134  1723 I P01FFF/Rilvendor: CHAN [HandleUnsolicited] HandleUnsolicited done for modem:0, index:0, atResponse:^BOOSTERNTF: 3, 20,"0600100001000004000000000102A4FF0202F6FF"
354   11-15 16:36:21.802  2809  2831 E C02D06/XCollie: Send kick,foundation to hungtask Successful
355   11-15 16:36:21.911   882  3016 I C01F0B/TelephonyVSim: state machine ProcessEvent Id: 125
356   11-15 16:36:21.911   882  3016 I C01F0B/TelephonyVSim: StateProcess
357   ```
358
359以纳秒为单位显示时间。
360
361   ```shell
362   $ hilog -v nsec
363   11-15 16:37:09.010658555  1134  1723 I C02B01/HrilExt: [BoosterRawInd-(hril_booster.cpp:296)] RilExt: BoosterRawInd
364   11-15 16:37:09.010676263  1134  1723 I C02B01/HrilExt: [BoosterRawInd-(hril_booster.cpp:328)] check need notify to satellite:indType 6
365   11-15 16:37:09.010800221  1134  1723 I C02B01/HrilExt: [NotifyToBoosterTel-(hril_manager_ext.cpp:436)] RilExt: report to telephony ext, requestNum: 4201
366   11-15 16:37:09.011011680  1134  1723 I C02B01/HrilExt: [NotifyToBoosterTel-(hril_manager_ext.cpp:440)] RilExt:Notify to booster tel finish
367   11-15 16:37:09.011064805  1134  1723 I C02B01/HrilExt: [NotifyToBoosterNet-(hril_manager_ext.cpp:450)] RilExt: HNOTI_BOOSTER_NET_IND report to booster net
368   11-15 16:37:09.011200742  1134  1723 I C02B01/HrilExt: [NotifyToBoosterNet-(hril_manager_ext.cpp:454)] RilExt: HNOTI_BOOSTER_NET_IND report to booster net finish
369   ```
370<!--RP10End-->
371
372## 查看和设置落盘任务
373
374**查看落盘任务**
375
376```shell
377hilog -w query
378```
379
380当前不存在落盘任务:
381
382```shell
383$ hilog -w query
384Persist task query failed
385No running persistent task [CODE: -63]
386```
387
388当前存在落盘任务:
389
390```shell
391$ hilog -w query
3921 init,core,app,only_prerelease zlib /data/log/hilog/hilog 4.0M 1000
3932 kmsg zlib /data/log/hilog/hilog_kmsg 4.0M 100
394```
395
396**设置落盘任务**
397
398> **说明:**
399>
400> 当前没有落盘任务时,才能开启落盘任务,如果已经存在落盘任务,需要先停止落盘任务。
401
402开启hilog落盘任务,并且设置落盘文件数量为1000个:
403
404```shell
405$ hilog -w start -n 1000
406Persist task [jobid:1][fileNum:1000][fileSize:4194304] start successfully
407```
408
409开启kmsglog落盘任务,并且设置落盘文件数量为100个:
410
411```shell
412$ hilog -w start -n 100 -t kmsg
413Persist task [jobid:2][fileNum:100][fileSize:4194304] start successfully
414```
415
416开启落盘任务时可以自定义落盘规则,其中压缩方式可以为zlib、zstd、none。
417
418以设置落盘文件名为kmsglog,大小为2M,数量为100个,其压缩方式为zlib压缩为例,命令行为:
419
420```shell
421$ hilog -w start -t kmsg -f kmsglog -l 2M -n 100 -m zlib
422Persist task [jobid:2][fileNum:100][fileSize:2097152] start successfully
423```
424
425**关闭落盘任务**
426
427停止当前落盘任务:
428
429```shell
430$ hilog -w stop
431Persist task [jobid:1] stop successfully
432Persist task [jobid:2] stop successfully
433```
434
435## 查看和设置日志级别
436
437**查看全局日志级别**
438
439```shell
440$ param get hilog.loggable.global
441I
442```
443<!--RP17-->
444全局日志级别默认为INFO;
445<!--RP17End-->
446
447<!--RP16-->
448## 设置日志级别
449
450   ```text
451   // 设置全局日志级别,重启后失效
452   hilog -b D/I/W/E/F
453
454   // 设置全局日志级别,重启仍生效
455   hilog -b D/I/W/E/F --persist
456
457   // 设置LOG_APP类型[DOMAINID]可打印的日志级别
458   hilog -b D/I/W/E/F -D 0x[DOMAINID]
459
460   // 设置[TAG]可打印的日志级别
461   hilog -b D/I/W/E/F -T [TAG]
462   ```
463
464   **使用样例:**
465
466   ```shell
467   $ hilog -b E
468   Set global log level to E successfully
469
470   $ hilog -b E --persist
471   Set global log level to E successfully
472   Set persist global log level to E successfully
473
474   $ hilog -b D -D 0x2d00
475   Set domain 0x2d00 log level to D successfully
476
477   $ hilog -b E -T testTag
478   Set tag testTag log level to E successfully
479   ```
480<!--RP16End-->
481
482## 其他常用命令
483
484### 查看日志缓冲区大小
485
486```shell
487hilog -g
488```
489
490**使用样例**:
491
492```shell
493$ hilog -g
494Log type app buffer size is 16.0M
495Log type init buffer size is 16.0M
496Log type core buffer size is 16.0M
497Log type only_prerelease buffer size is 16.0M
498```
499
500### 修改日志缓冲区大小
501
502```shell
503hilog -G size
504```
505
506**使用样例**:
507
508```shell
509$ hilog -G 16M
510Set log type app buffer size to 16.0M successfully
511Set log type init buffer size to 16.0M successfully
512Set log type core buffer size to 16.0M successfully
513Set log type only_prerelease buffer size to 16.0M successfully
514```
515
516### 清除缓冲区日志
517
518```shell
519hilog -r
520```
521
522**使用样例**:
523
524```shell
525$ hilog -r
526Log type core,app,only_prerelease buffer clear successfully
527```
528
529### 内核日志读取开关控制
530
531```shell
532hilog -k on/off
533```
534
535**使用样例**:
536
537```shell
538$ hilog -k on
539Set hilogd storing kmsg log on successfully
540
541$ hilog -k off
542Set hilogd storing kmsg log off successfully
543```
544
545### 查询统计信息
546
547```shell
548hilog -s
549```
550
551> **说明:**
552>
553> 需要先执行 param set persist.sys.hilog.stats true 设置该属性开启统计功能,并且重启后,才能正式开始统计。
554
555**使用样例**:
556
557```shell
558$ param set persist.sys.hilog.stats true
559Set parameter persist.sys.hilog.stats true success
560$ reboot
561$ hilog -s
562Log statistic report (Duration: 0h0m32s.564, From: 11-15 16:04:08.628):
563Total lines: 137517, length: 8.0M
564DEBUG lines: 0(0%), length: 0.0B(0%)
565INFO lines: 101795(74%), length: 6.1M(76%)
566WARN lines: 10268(7.5%), length: 719.9K(8.8%)
567ERROR lines: 25452(19%), length: 1.2M(15%)
568FATAL lines: 2(0.0015%), length: 259.0B(0.0031%)
569------------------------------------------------------------
570Domain Table:
571LOGTYPE- DOMAIN---- TAG----------------------------- MAX_FREQ-- TIME---------------- MAX_TP---- TIME---------------- LINES----- LENGTH---- DROPPED---
572app----- 0xf00----- -------------------------------- 924.00---- 11-15 16:04:25.594-- 111975.00- 11-15 16:04:25.594-- 3386------ 371.5K---- 0---------
573app----- 0x0------- -------------------------------- 285.00---- 11-15 16:04:34.877-- 44242.00-- 11-15 16:04:34.877-- 990------- 129.2K---- 0---------
574```
575
576**统计信息说明**
577
578```shell
579MAX_FREQ:日志打印频率最高的每秒行数。
580TIME:    对应发生时间。
581MAX_TP:  日志打印频率最高的每秒字节数。
582LINES:   统计周期内的总行数。
583LENGTH:  统计周期内的总字节数。
584DROPPED: 统计周期内丢失的行数。
585```
586
587### 清除统计信息
588
589```shell
590hilog -S
591```
592
593**使用样例**:
594
595```shell
596$ hilog -S
597Statistic info clear successfully
598```
599
600### 进程超限开关
601
602```shell
603hilog -Q pidon/pidoff
604```
605
606**使用样例**:
607
608开启进程超限管控:
609
610```shell
611$ hilog -Q pidon
612Set flow control by process to enabled successfully
613```
614
615关闭进程超限管控:
616
617```shell
618$ hilog -Q pidoff
619Set flow control by process to disabled successfully
620```
621
622### domain超限开关
623
624```shell
625hilog -Q domainon/domainoff
626```
627
628**使用样例**:
629
630开启domain超限管控:
631
632```shell
633$ hilog -Q domainon
634Set flow control by domain to enabled successfully
635```
636
637关闭domain超限管控:
638
639```shell
640$ hilog -Q domainoff
641Set flow control by domain to disabled successfully
642```
643
644## hilog超限机制介绍
645
646日志打印量过大时,会触发hilog超限管控机制。触发后,超出部分的日志会被丢弃,并且打印超限提示日志。debug应用默认关闭此机制。
647
648超限机制介绍如下:
649
650### 应用日志
651
652进程维度管控,打印到LOG_APP buffer里面的应用日志适配了pid超限机制,当某进程打印的LOG_APP类型日志量在一秒内超过阈值时会触发管控,超限提示日志示例如下:
653
654<!--RP11-->
655```text
65604-19 17:02:34.219  5394  5394 W A00032/LOGLIMIT: ==com.example.myapplication LOGS OVER PROC QUOTA, 3091 DROPPED==
657```
658<!--RP11End-->
659
660本条日志表示进程com.example.myapplication在17:02:34时存在日志打印超限,在17:02:34.219的前一秒内,有3091行日志由于超限管控丢弃,未打印出来。
661
662**处理方式**:可参考[进程超限开关](#进程超限开关),关闭对应管控机制。
663
664
665### 系统日志
666
667domainID维度管控,打印到LOG_CORE buffer里面的系统日志适配了domain超限机制,当某domainID打印的LOG_CORE类型日志量在一秒内超过阈值时触发管控,超限提示日志示例如下:
668
669<!--RP12-->
670```text
67104-19 17:02:34.219  5394  5394 W C02C02/LOGLIMIT: 108 line(s) dropped in a second!
672```
673<!--RP12End-->
674
675本条日志表示domainID为02C02的日志在17:02:34时存在日志打印超限,在17:02:34.219的前一秒内,有108行日志由于超限管控丢弃,未打印出来。
676
677**处理方式**:可参考[domain超限开关](#domain超限开关),关闭对应管控机制。
678
679
680## 日志丢失处理方法
681
682目前日志丢失场景都有相应的维测信息,可以在hilog日志里面搜索对应关键字查看日志具体丢失的原因。
683
684可以使用正则表达式来搜索包含这些关键字的日志行:LOGLIMIT|Slow reader missed|write socket failed。
685
686LOGLIMIT是进程或domainID超限管控的丢失;Slow reader missed是全局的日志丢失;write socket failed是进程对应的日志丢失。
687
688> **说明:**
689>
690> 当出现这些打印时,说明日志已经丢失,无法恢复找回。
691>
692> 如果是在线运维场景出现,需要参考下方处理方式并且本地复现,然后查看完整日志。
693
694
695### LOGLIMIT
696
697**含义**:日志打印超限,该进程或者domainID被管控。属于领域日志量超出hilog规格后的主动管控,需要领域对日志进行精简和整改。提示日志示例如下:
698
699<!--RP13-->
700```text
70104-19 17:02:34.219  5394  5394 W A00032/LOGLIMIT: ==com.example.myapplication LOGS OVER PROC QUOTA, 3091 DROPPED==
702```
703<!--RP13End-->
704
705**处理方式**:可参考[hilog超限机制介绍](#hilog超限机制介绍),关闭对应管控机制。
706
707
708### Slow reader missed
709
710**含义**:打印时间点前后日志量太大,hilog buffer中的日志还未落盘已经被循环覆盖了。提示日志示例如下:
711
712```text
71304-19 17:02:34.219     0     0 I C00000/HiLog: ========Slow reader missed log lines: 137
714```
715
716**原因**:以下任意一种情况,均有可能导致全局日志丢失。
717
718- 日志级别设置为D。
719
720- 关闭了超限管控。
721
722- 有模块在循环打印日志。
723
724**处理方式**:
725
726- 通过hilog -g命令查询buffer大小(hilog buffer大小默认是256KB)。
727
728- 通过hilog -G命令扩大hilog buffer大小。如下命令表示将buffer大小修改为16MB(当前允许的最大规格为16MB)。
729
730  ```shell
731  hilog -G 16M
732  ```
733
734- 同时查看是否后台有领域频繁打印日志。若发现某个领域日志频繁打印,影响正常日志读取,可参考“write socket failed”的规避方式,通过命令关闭其领域的日志打印。
735
736
737### write socket failed
738
739**含义**:日志写入socket失败,出现丢包问题。提示日志示例如下:
740
741<!--RP14-->
742```text
74304-19 17:02:34.219  5394  5394 W A00032/HiLog: write socket failed, 8 line(s) dropped!
744```
745<!--RP14End-->
746
747**原因**:以下任意一种情况,均有可能导致进程日志丢失。
748
749- 日志级别设置为D。
750
751- 关闭了超限管控。
752
753- 有模块在循环打印日志。
754
755- 存在高负载问题,如果出现CPU高负载或者低内存问题,会导致socket服务端处理日志过慢,socket通道中日志堆积严重,也会导致客户端写入socket数据失败。
756
757**处理方式**:关闭其他领域的日志打印,只打印本模块的日志。
758
759- 关闭其他领域日志:
760
761  ```shell
762  hilog -b X
763  ```
764
765- 打开本模块的日志打印:
766
767  LOG_APP类型:
768
769  ```shell
770  hilog -b I -D 0x3200(将03200 domain能够打印出来的日志级别设为INFO)
771
772  hilog -b I -D 0x3201(将03201 domain能够打印出来的日志级别设为INFO)
773  ```
774
775  LOG_CORE类型:
776
777  ```shell
778  hilog -b I -D d003200(将03200 domain能够打印出来的日志级别设为INFO)
779
780  hilog -b I -D d003201(将03201 domain能够打印出来的日志级别设为INFO)
781  ```
782