DFX-Hilog日志打印指导

DFX-Hilog日志打印指导

HarmonyOS
2024-06-13 11:07:55
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
netos

日志系统概述

用户态Process通过日志接口将日志内容写入hilogd buffer中,用户态的hilog工具支持将输出到控制台(console)进行查看,同时也支持通过hilog工具给hilogd发送命令将日志落盘。

下述主要任务的详细内容:

  • hilogd是流水日志的用户态服务。

a. 此功能是常驻服务,在研发版本系统启动时默认启动。

b. 当用户态模块调用日志接口,将格式化好的日志内容传输给该任务,并将其存储在一个环形缓冲区中 。

  • hilog日志查看命令行工具

a. 从hilogd读取ringbuffer内容,输出到标准输出,可支持日志过滤。

支持特性:

  • 支持参数隐私标识格式化
  • 支持对超标日志打印进程流控
  • 支持对超标日志打印domain(标识子系统/模块)流控
  • 支持日志流压缩落盘

隐私标识格式化

短选项

长选项

参数

说明

-p

–privacy

<on/off>

支持系统调试时日志隐私开关控制



on

打开隐私开关,显示



off

关闭隐私开关,显示明文


日志流控

短选项

参数

说明

-Q


流控缺省配额开关控制


pidon

进程流控开关打开


pidoff

进程流控开关关闭


domainon

domain流控开关打开


domainoff

domain流控开关关闭


日志流压缩落盘

短选项

长选项

参数

说明

-m

–stream


落盘方式控制



none

无压缩方式落盘



zlib

zlib压缩算法落盘,落盘文件为.gz



zstd

zstd压缩算法落盘,落盘文件为.zst


示例:hilog -w start -f “hilog” -l 66k -m zlib -n 10解释:执行名字为hilog的落盘任务,10个落盘文件进行轮转,单个文件落盘大小为66k,采用zlib压缩算法。

落盘路径:data/log/hilog

参考:

hilog 工具

  • 日志的type包括app(应用日志)、core(系统日志)、init(初始化日志)、kmsg(内核日志)
  • 筛选type的示例:

1. 只打印core和app类型的日志:hilog -t app core

2. 排除core和app类型的日志:hilog -t ^core,app

排除查询可以使用以"^“开头的参数和分隔符”,"

  • 关闭日志限流: hilog -Q pidoff
  • 关闭隐私标志: hdc shell hilog -p off
  • 增加日志buffer: hilog -G 200M
  • 日志落盘: hilog -w start

详细参数可以参考hilog使用说明

DevEco Studio的Log工具

​ DevEco Studio提供了"Log > HiLog"窗口查看日志信息,开发者可通过设置设备、进程、日志级别和搜索关键词来筛选日志信息。搜索功能支持使用正则表达式,开发者可通过搜索自定义的业务领域值和TAG来筛选日志信息。

按钮功能

启用换行并防止水平滚动

:跳转到日志底部,查看最新的日志消息。

:清理设备的日志缓存,并清除当前窗口的日志。建议每次调试应用/服务前,点击该按钮清除日志。

:重启日志打印

:可以保存日志,并输出一个txt文件

:关闭日志窗口

:新建一个日志窗口

日志筛选

可以在箭头位置输入关键词,筛选携带关键词的日志,示例如下:

箭头所指处可以打开Filter Setting,筛选日志,示例如下:

日志颜色和样式

可以设置不同等级的日志的颜色和样式:

FAQ

1、Q:日志丢失 
    问题原因:日志丢失的根因是因为日志量大,导致buffer会满,可以通过增大buffer或者只限定某tag点的日志进buffer来 
    解决。 
    A:解决方案: 
    现在系统里各模块日志打印太多了,需要整改,目前可以这样: 
    只打开某领域/TAG的日志(其他日志不进入buffer): 
    hilog -b X // 关闭所有日志 
    hilog -b D -D 0xD0xxxxx // 设置0xD0xxxxx这个领域的日志可打印最低等级为DEBUG, xxxxx就是日志里面tag前面的那 
    串数字 
    hilog -b D -T xxx // 设置xxx 这个tag日志可打印最低等级为DEBUG  例:hilog -b D -T JSApp 
    关闭某领域/TAG的日志: 
    hilog -b X -D 0xD0xxxxx // 关闭0xD0xxxxx这个领域的日志,xxxxx就是日志里面tag前面的那串数字 
    hilog -b X -T xxx // 关闭xxx这个tag的日志 
    重启后需要重新设置 
    要想重启也生效的话,需要手动修改/etc/param/hilog.para文件 
    以只打开某domain/TAG日志为例,在里面: 
    修改: 
    hilog.loggable.global=X 
    增加domain的控制: 
    hilog.loggable.domain.d0xxxxx=D  
    注意d0前面不要加0x 
    增加tag的控制: 
    hilog.loggable.tag.xxx=D 
  
2、Q:日志中text文本乱码 
   问题原因:hilog打印参数未添加隐私标识 
   A:解决方案: 
   如果乱码是private, hilog打印参数需要添加隐私标识 ,默认是{private}所以打印的参数都会输出<private>,只需要在 
   引用时手动添加标识,例如 
   %{public}d,就可以打印出来。ts/js代码支持混淆(%{public}d 这个是字符串占位符)。参考文档:Hilog日志打印 
  
3、Q:如何设置日志的打印等级 
   A:hilog   –h 帮助信息中的设置可打印等级的说明部分如下: 
   - b < loglevel >, -- baselevel   =< loglevel > 
     Set global  loggable   level to < loglevel > 
     Long and short level string are both accepted. 
     Long level string  coule   be: DEBUG/INFO/WARN/ERROR/FATAL/X. 
     Short level string  coule   be: D/I/W/E/F/X. 
     X means that  loggable   level is higher than the max level, no log could be printed. 
   Advanced options: 
   -D <domain>, --domain=<domain> 
     Set specific domain  loggable   level. 
     See domain description at the end of this message. 
   -T <tag>, --tag=<tag> 
     Set specific tag  loggable   level. 
     The priority is: tag level > domain level > global level. 
   解释: 
   hilog   –b <level>   或  hilog   –   baselevel   =<level>  设置整机所有领域可打印的日志等级 
   hilog   –b <level>  -D <domainid>  设置某个领域的可打印日志等级 
   hilog   –b <level>   -T <tag>  设置某个tag的可打印日志等级 
   日志等级可以是 : D/I/W/E/F/X以及DEBUG/INFO/WARN/ERROR/FATAL/X, 其中X表示禁止所有日志打印 
   上述三个设置的优先级:tag 设置  > domain 设置  >  全局设置 
   比如:设置了全局打印等级为INFO,  设置了某个tag的等级为DEBUG ,  则这个tag的可打印等级为DEBUG,  其它日志可打印 
   等级仍为INFO 
   又比如:设置了全局打印等级为DEBUG,  设置了某个tag的等级为X,  则这个tag的日志打印被禁止,其它日志可打印等级仍 
   为DEBUG 
   以上设置项对应的param为: 
   全局日志等级:hilog.loggable.global 
   Domain日志等级: hilog.loggable.domain.xxxxxxx其中xxxxxxx就是设置的domainid,注意这里要用十六进制小写字符 
   串,不要加0x开头 
   Tag日志等级:  hilog.loggable.tag.xxx其中xxx就是要设置的tag 
   备注:调试的时候如果想重启之后还继续生效的话,可以修改/etc/param/hilog.para文件,但这是基于hilog的内部实现不 
   一定永久可用。 
  
4、Q:如何输出指定日志 
   A:type、level 、domain、tag支持排除查询,排除查询可以使用以“^”开头的参数和分隔符“,”。示例:hilog -t  
   ^core,app 排除core和app类型 
   的日志,可以与 其他参数一起使用; hilog -t app  core 打印 core和app类型的日志,可以与其他参数一起使用;hdc  
   shell hilog | grep “关 
   键词” 可以根据关键词筛选日志。参考文档:HiLog组件 
    static void Test(void) { 
        // 1.注册回调接口 
        OH_LOG_SetCallback(MyHiLog); 
        // 2.调用hilog接口打印日志,日志内容会输出到hilog,同时通过回调返回给MyHiLog,开发者可以在MyHiLog中自行处理日志 
        HiLog::Info(LABEL, "hello world"); 
       OH_LOG_ERROR(LOG_APP, "Failed to visit %{private}s, reason:%{public}d.", url, errno); 
    } 
};
分享
微博
QQ
微信
回复
2024-06-13 21:59:43
相关问题
在cmd中打印Hilog日志
1933浏览 • 1回复 待解决
真机调试,HiLog日志打印
11156浏览 • 2回复 待解决
HiLog日志打印不出来?
11205浏览 • 3回复 已解决
DFX-性能打点(HiTrace)指导
970浏览 • 1回复 待解决
HiLog打印的C代码日志怎么查看?
2506浏览 • 1回复 待解决
Native侧如何使用hilog打印日志信息
2419浏览 • 1回复 待解决
如何解决hilog.debug日志无法打印
2418浏览 • 1回复 待解决
HarmonyOS hilog打印几十K日志必现cppCrash
181浏览 • 1回复 待解决
模拟器Hilog打印日志,控制台不显示
13509浏览 • 4回复 待解决