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 | <n> | 只显示前<n>行日志。 | 66| -z | --tail | <n> | 只显示后<n>行日志。 | 67| -t | --type | <type> | 查看指定类型的日志。| 68| | | app | 查看应用日志。 | 69| | | core | 查看系统日志。 | 70| | | init | 查看启动日志。 | 71| | | kmsg | 查看内核日志。 | 72| | | only_prerelease | 查看仅在系统release版本前打印的日志,应用开发者无需关注。 | 73| -L | --level | <level> | 指定级别的日志,示例:-L D/I/W/E/F。 | 74| -D | --domain | <domain> | 指定domain。 | 75| -T | --tag | <tag> | 指定tag。 | 76| -P | --pid | <pid> | 标识不同的pid。 | 77| -e | --regex | <expr> | 只打印日志消息与<expr>匹配的行,其中<expr>是一个正则表达式。 | 78| -v | --format | <format> | 显示格式控制。 | 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 | <size> | 设置指定<type>日志类型缓冲区的大小,配合-t指定某一类型使用,默认app和core, 可使用B/K/M为单位,范围为64K-16M。 | 93| -s | --statistics | - | 查询统计信息,需配合-t或-D使用。 | 94| -S | - | - | 清除统计信息,需配合-t或-D使用。 | 95| -w | --write | <control> | 落盘任务控制。 | 96| | | query | 落盘任务查询。 | 97| | | start | 落盘任务开始,命令行参数为文件名、单文件大小、落盘算法、rotate文件数目。 | 98| | | stop | 落盘任务停止。 | 99| | | refresh | 刷新缓冲区的日志到落盘文件。 | 100| | | clear | 删除已经落盘的日志文件。 | 101| -f | --filename | <filename> | 设置落盘的文件名。 | 102| -l | --length | <length> | 设置落盘的文件大小,需要大于等于64K。 | 103| -n | --number | <number> | 设置落盘文件的个数。 | 104| -m | --stream | <algorithm> | 落盘方式控制。 | 105| | | none | 无压缩方式落盘。 | 106| | | zlib | zlib压缩算法落盘,落盘文件为.gz。 | 107| -j | --jobid | <jobid> | 设置落盘任务的ID。 | 108| -p | --privacy | <on/off> | 支持系统调试时日志隐私开关控制。 | 109| | | on | 打开隐私开关,显示<private>。 | 110| | | off | 关闭隐私开关,显示明文。 | 111| -k | - | <on/off> | Kernel日志读取开关控制。 | 112| | | on | 打开读取kernel日志。 | 113| | | off | 关闭读取kernel日志。 | 114| -Q | - | <control-type> | 超限缺省配额开关控制。 | 115| | | pidon | 打开进程超限管控开关。 | 116| | | pidoff | 关闭进程超限管控开关。 | 117| | | domainon | 打开domain超限管控开关。 | 118| | | domainoff | 关闭domain超限管控开关。 | 119| -b | --baselevel | <loglevel> | 设置可打印日志的最低等级: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