HarmonyOS开发 - 日志打印

        在程序开发过程中,日志输出是不可或缺的一部分。能有效的记录和分析日志数据,使开发人员可以更好地了解程序的运行状况、解决问题、优化性能并满足合规性要求等。

        当程序出现错误或异常时,日志记录输出可以帮助开发人员快速定位问题发生的位置和原因;通过分析日志,开发人员可以了解程序在出错前后的状态和行为,从而更有效地进行调试。

        在HarmonyOS中,提供了HiLog日志系统,让应用/服务可以按照指定类型、指定级别、指定格式字符串打印日志内容,帮助开发者了解应用/服务的运行状态,更好地调试程序。

        当然,对于习惯前端开发人员,HarmonyOS也提供了Console的调试控制台,类似于浏览器提供的JavaScript控制台机制。

一、HiLog日志打印

        HiLog中定义了DEBUG、INFO、WARN、ERROR、FATAL五种日志级别,并提供了对应的方法用于打印不同级别的日志,如下表所示:

序号接口名描述
1debug​(domain: number, tag: string, format: string, ...args: any[])打印DEBUG级别的日志。DEBUG级别日志表示仅用于应用/服务调试,默认不打印,打印前需要在设备的“开发人员选项”中打开“USB调试”开关。
2info​(domain: number, tag: string, format: string, ...args: any[])打印INFO级别的日志。INFO级别日志表示普通的信息。
3warn​(domain: number, tag: string, format: string, ...args: any[])打印WARN级别的日志。WARN级别日志表示存在警告。
4error​(domain: number, tag: string, format: string, ...args: any[])打印ERROR级别的日志。ERROR级别日志表示存在错误。
5fatal​(domain: number, tag: string, format: string, ...args: any[])打印FATAL级别的日志。FATAL级别日志表示出现致命错误、不可恢复错误。

        参数说明如下表:

序号名称描述
1domain用于指定打印日志所对应的业务领域,取值范围为0x0~0xFFFFF,开发者可以根据需要进行自定义。
2tag用于指定日志标识,可以为任意字符串,建议标识调用所在的类或者业务行为。
3format格式字符串,用于日志的格式化输出。格式字符串中可以设置多个参数,例如格式字符串为“Failed to visit %s.”,“%s”为参数类型为string的变参标识,具体取值在args中定义。
每个参数需添加隐私标识,分为{public}或{private},默认为{private}。{public}表示日志打印结果可见;{private}表示日志打印结果不可见,输出结果为<private>。
4args可以为0个或多个参数,是格式字符串中参数类型对应的参数列表。参数的数量、类型必须与格式字符串中的标识一一对应。

        例如,在创建一个新项目中,打开entryability/EntryAbility.ts文件,其中使用了HiLog来记录App启动过程,代码如下:

import UIAbility from '@ohos.app.ability.UIAbility';
import hilog from '@ohos.hilog';
import window from '@ohos.window';export default class EntryAbility extends UIAbility {onCreate(want, launchParam) {hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');}onDestroy() {hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');}onWindowStageCreate(windowStage: window.WindowStage) {// Main window is created, set main page for this abilityhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');windowStage.loadContent('pages/RouterPage', (err, data) => {if (err.code) {hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');return;}hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');});}onWindowStageDestroy() {// Main window is destroyed, release UI related resourceshilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');}onForeground() {// Ability has brought to foregroundhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');}onBackground() {// Ability has back to backgroundhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');}
}

        这是使用虚拟机启动后的控制台输出结果,如下图:

        当控制台内容较多时,只显示自己需要的信息,则可以通过tag进行筛选,在搜索框中填写输出信息的tag标识即可,如上示例中日志输出tag标识为testTag。

二、console控制台

        Console控制台中定义了debug、log、info、warn、error、assert等六种日志级别。

        具体如下表:

序号名称描述
1debug(message: string, ...arguments: any[])

输出方式打印调试信息。

从API version 9开始,该接口支持在ArkTS卡片中使用。

2log(message: string, ...arguments: any[])

输出方式打印日志信息。

从API version 9开始,该接口支持在ArkTS卡片中使用。

3info(message: string, ...arguments: any[])

输出方式打印日志信息。(console.log()的别名)。

从API version 9开始,该接口支持在ArkTS卡片中使用。

4warn(message: string, ...arguments: any[])

输出方式打印警告信息。

从API version 9开始,该接口支持在ArkTS卡片中使用。

5error(message: string, ...arguments: any[])

输出方式打印错误信息。

从API version 9开始,该接口支持在ArkTS卡片中使用。

6assert(message: string, ...arguments: any[])

断言打印。

从API version 10+开始,该接口支持在ArkTS卡片中使用。

        console.info示例代码如下:

@Entry
@Component
struct ButtonPage {@State message: string = 'Hello World'build() {Row() {Column() {Button("点击事件").onClick(() => {console.log('clickTest', '这是一个按钮点击事件');})}.width('100%')}.height('100%')}
}

        控制台输出结果如下:

        其官网ArkTS API给出的示例,可以进行格式化输出,地址:文档中心,如下代码:

const number = 5;
console.log('count: %d', number);  // 格式化输出替换message中的文本。
// count: 5 
console.log('count:', number);  // 打印message以及其余信息
// count: 5 
console.log('count:'); // 仅打印message
// count: 

        但是项目中测试格式化输出无效,不过也不必过于纠结此问题,可以使用模板字符串来代替格式输出功能,代码如下:

const number = 5;
console.log(`cout ${number}`);  // 格式化输出替换message中的文本。
// count: 5 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/35099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AIGC 在前端流式获取内容SSE

AIGC 在前端流式获取内容SSE 简介具体实现 简介 在 OpenAI 的 API 中&#xff0c;SSE 通常用于实现实时数据传输。例如&#xff0c;在聊天模型&#xff08;如 ChatGPT&#xff09;中&#xff0c;使用 SSE 可以让客户端实时接收到生成的对话内容&#xff0c;而不需要等待整个响…

React官方文档学习记录

官方文档&#xff1a;React 代办&#xff1a;组件通信的方式&#xff1b; 1 标签语法JSX 你必须闭合标签&#xff0c;如 <br />。你的组件也不能返回多个 JSX 标签。你必须将它们包裹到一个共享的父级中&#xff0c;比如 <div>...</div> 或使用空的<>…

CppInsights: 学习C++模版的神器

CppInsights&#xff1a;深入理解C代码的利器 C是一门强大而复杂的编程语言&#xff0c;其复杂性主要体现在语言的多层次抽象和丰富的语法特性上。尽管这些特性使得C能够高效地处理复杂的任务&#xff0c;但也给开发者带来了理解和调试代码的巨大挑战。CppInsights正是在这一背…

【LeetCode】每日一题:排序链表

给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 解题思路 主要是归并排序&#xff0c;即分治思想&#xff0c;两个数组都有序了之后再双指针合并。这个过程当中&#xff0c;链表排序涉及到&#xff1a; 1、如何寻找到中点来二分&#xff1a;快…

php composer 报错

引用文章&#xff1a; Composer设置国内镜像_composer 国内源-CSDN博客 php composer.phar require --prefer-dist yiidoc/yii2-redactor "*" A connection timeout was encountered. If you intend to run Composer without connecting to the internet, run the …

【Docker】rancher 管理平台搭建

目录 1. 所有节点安装docker 2. 所有节点配置/etc/sysconfig/docker 文件修改如下配置 3. 配置证书 4. 镜像仓库导入镜像 5. 创建镜像仓库 5.1 查询上传的 image id 5.2 镜像打标签 5.3 镜像上推 6. server 节点 7. client 节点 8. 在 server 节点启动 9. 查看运行…

SHELL/作业/2024/6/25

终端输入两个数&#xff0c;判断两数是否相等&#xff0c;如果不相等&#xff0c;判断大小关系 #!/bin/basha$1b$2 if [ $a -eq $b ]then echo "ab"elif [ $a -gt $b ]thenecho "a>b"elseecho "a<b"fi2.已知网址www.hqyj.com…

vivado AUTOPIPELINE_MODULE、AUTOPIPELINE_INCLUDE

自动管道模块 AUTOPIPELINE_MODULE属性为所有组建立一个单独的名称空间 在整个子层次结构中定义的名称。它必须设置在包括的层次结构上 GROUP和AUTOPIPELINE_ LIMIT标记的网络。它也必须使用 当在设计中多次实例化具有自动流水线特性的模块时。 参见Vivado Design Suite用户指南…

算法训练营day20--235. 二叉搜索树的最近公共祖先+701.二叉搜索树中的插入操作 +450.删除二叉搜索树中的节点

一、235. 二叉搜索树的最近公共祖先 题目链接&#xff1a;https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/ 文章讲解&#xff1a;https://programmercarl.com/0235.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E8%BF%91…

PointCloudLib-开发环境搭建-C++

简介 PCL(Point Cloud Library)是在吸收了前人点云相关研究基础上建立起来的大型跨平台开源C++编程库,它实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、

Linux源码阅读笔记04-实时调度类及SMP和NUMA

Linux进程分类 实时进程普通进程 如果系统中有一个实时进程并且可执行&#xff0c;调度器总是会选择他&#xff0c;除非有另外一个优先级高的实时进程。SCHED_FIFO&#xff1a;没有时间片&#xff0c;被调度器选择之后&#xff0c;可以运行任意长的时间。SCHED_RR&#xff1a;有…

c++: 理解编译器在背后所做的工作-工具篇

理解C模板以及编译器的优化是深入掌握C编程的重要部分。有一些其他工具和技术可以帮助你更好地理解编译器在背后所做的工作&#xff0c;特别是优化方面。以下是一些有用的工具和技术&#xff1a; 1. Compiler Explorer (Godbolt) Compiler Explorer 是一个非常流行的在线工具…

MybatisPlus 的入门与实践:IService接口 实现 CRUD,简化数据库操作

引言 在MybatisPlus框架中&#xff0c;IService接口扮演着重要的角色。作为一个通用的服务接口&#xff0c;IService定义了一系列数据库操作方法&#xff0c;包括查询、插入、更新、删除等。这些方法的定义使得在服务层进行数据库操作变得更为便捷和高效。 IService 概述 My…

Attention系列总结-粘贴自知乎

1. 梦想做个翟老师&#xff1a;阿里&#xff1a;Behavior Sequence Transformer 解读48 赞同 7 评论文章 优点:捕捉用户行为历史序列中的顺序信息。w2v也是捕捉用户序列信息的,本质差异在于啥&#xff1f; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff0…

请解释Java中的策略模式,并举例说明其应用场景和实现方式。请解释Java中的模板方法模式,并讨论其在实际项目中的应用。

请解释Java中的策略模式&#xff0c;并举例说明其应用场景和实现方式。 策略模式&#xff08;Strategy Pattern&#xff09; 策略模式是一种行为设计模式&#xff0c;它使你能够定义一系列算法&#xff0c;并将每一个算法封装起来&#xff0c;使它们可以互相替换。策略模式使…

Java Collection接口及方法

Java Collection接口及方法 文章目录 Java Collection接口及方法常用方法添加判断删除其他 集合与数组的相互转换将集合转化为数组将数组转化为集合 使用要求Iterator(迭代器)接口Iterator接口如何使用迭代器遍历元素错误的遍历增强for循环的使用(JDK5.0新特性) Java 集合框架概…

昇思25天学习打卡营第2天|onereal》

今天学习内容是了解华为昇思平台。虽然打了卡&#xff0c;但是我的jupyter里面并没有播放按钮&#xff0c;所以还是无法运行代码。反映给昇思吴彦祖小哥了&#xff0c;他说需要专家帮我解决。 我还是要自我表扬一下&#xff0c;不懂就问&#xff0c;切莫不懂装懂&#xff0c;那…

基于51单片机的RFID门禁系统-LCD12864显示

一.硬件方案 本RFID系统设计可分为硬件部分和软件部分。硬件部分以MFRC522射频识别模块为核心&#xff0c;结合主控模块STC89C52设计系统的外围硬件电路&#xff0c;实现对射频卡的控制与MCU之间的互通。软件部分采用C语言进行系统的下位机程序的开发&#xff0c;完成与IC卡之…

Windows 根据github上的环境需求,安装一个虚拟环境,安装cuda和torch

比如我们在github上看到一个关于运行环境的需求 Installation xxx系统Python 3.xxx CUDA 9.2PyTorch 1.9.0xxxxxx 最主要的就是cuda和torch&#xff0c;这两个会卡很多环境的安装。 我们重新走一遍环境安装。 首先创建一个虚拟环境 conda create -n 环境名字 python3.xxx…

【算法学习】判断点在多边形内外的算法以及确定内外两点连线与边界的交点

1.前言&#xff1a; 在GIS开发中&#xff0c;经常会遇到确定一个坐标点是否在一块区域的内部这一问题。 如果这个问题不是一个单纯的数学问题&#xff0c;例如&#xff1a;在判断DEM、二维图像像素点、3D点云点等含有自身特征信息的这些点是否在一个区域范围内部的时候&#x…