鸿蒙中的日志库-Logger

devtools/2025/1/15 16:11:47/

鸿蒙中的Logger

Logger

灵感来源 - Android logger

HarmonyOS使用的日志库,具备轻量、美观强大、可扩展的特性,日志写入文件。使用API 12,点击可以跳转到源文件

上图

在这里插入图片描述

打印Error或者BusinessError

在这里插入图片描述

写入文件

因为按行写的一条日志,里面可能有换行符,所以把换行符都替换成‘-----’这个了
在这里插入图片描述

快速开始

安装

ohpm install @nzy/logger

导入

import { Logger } from '@nzy/logger';

打印日志

Logger.debug('hello world')
Logger.info(new Person())
Logger.warn(new Person())
Logger.error('这是一个error')
Logger.fatal('这是一个fatal')
Logger.json(new Person())

全局初始化

如果需要写入文件功能,请尽早初始化

// 也可以不用初始化
Logger.init();
// 或者传递过去,如果要是写入文件 jsonWrite = true ,必须传递parentPath,必须传递 FileStrategy
Logger.init({domain: 0x0000, // domainisEnable: true, // 是否打印,默认是 true,是否打印,不影响写文件isShowFile: true, // 是否显示打印日志文件的位置 默认 truetag: 'MyTag', // 全局TAG 默认是 LoggerjsonWrite: true, // 是否写入文件 默认是 truedebugLevelWrite: true, // debug级别的是否写入文件 默认是 trueparentPath: parentPath // 写入文件的 parent 路径
},new FileStrategy(`${Date.now()}.txt`)// 要写入文件策略模式,自己也可以去实现
)

LogOptions

属性默认值描述
domain0x0000Hilog的domain
isEnabletrue是否打印,不影响写文件
isShowFiletrue是否显示打印的文件以及行号
tagLogger全局TAG
jsonWritetrue是否写入文件,必须传递FileStrategy才能真正写入
parentPath写入文件的 parent 路径,方便当有多个日志文件的时候,全部捞出来,如果要写入 必须传

设置新的FileStrategy

当设置新的FileStrategy的时候,日志会写入新的文件,并且返回旧文件的全路径,可以拿这个旧文件上传到服务器,上传成功请删除旧文件

let oldFilePath = Logger.setNewFile(new FileStrategy(`${Date.now()}.txt`))
// 可以把这个上传到服务器
if (oldFilePath && fs.accessSync(oldFilePath)) {// 存在 上传给服务器// 删除此文件// fs.unlinkSync(oldFilePath)console.log('上传服务器,并且删除此文件')
}

拿到所有的日志文件

在全局初始化的时候,有个parentPath,当冷启动的时候,可以拿到所有这个文件夹下的所有日志,上传给服务器,并且删除

let parentPath = getContext(this).getApplicationContext().filesDir
// 当启动起来的时候
// 去拿parentPath下面所有的文件,然后上传上去
// 这里面有可能是多个文件
let files: string[] = fs.listFileSync(parentPath)

注意点

跳转到源文件

由于 DevEco Studio 只能在error和warn的情况下才能跳转源文件,所以需要 DevEco Studio
安装一个插件 awesome-console,并且在 DevEco Studio 中
Marketplace 搜不到,所以需要从 awesome-console 手动安装

打印丢失

如果打印过大的Json,在模拟器上有可能丢失,在真机上不会丢失(但是比如循环10000次打印 ,在真机上也会丢失),HiLog和console属于DevEco
Studio 的bug
比如 这样就 在模拟器中就会丢失,在真机就不会丢失,如果index < 10000 ,真机也会丢失

 for(let index = 0; index<1000;index++){console.log(`----${index}-----`)}

贡献代码

使用过程中发现任何问题都可以提 Issue。
给我们,当然,我们也非常欢迎你给我们发 PR 。

开源协议

本项目基于 Apache License 2.0 ,请自由地享受和参与开源。

源码Gitee

OpenHarmony三方库中心仓


http://www.ppmy.cn/devtools/110972.html

相关文章

软件工程测试

1. 软件测试概述 通俗地说&#xff0c;软件测试是为了发现错误而执行程序的过程。 软件测试&#xff1a;根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例&#xff08;即输入数据及其预期的输出结果&#xff09;&#xff0c;并利用这些测试用例去运行程序…

go面试: GMP 模型为什么要有 P ?

在 Golang 的运行时系统中&#xff0c;GMP 模型的设计理念是为了高效地管理并发执行的 Goroutines&#xff0c;其中 P&#xff08;Processor&#xff09;的引入扮演着至关重要的角色。以下是我结合工作经验总结的 P 的主要作用和意义&#xff1a; 1. 调度上下文 P 提供调度上…

git一个项目关联多个远程仓库

一行代码就行&#xff1a; git remote set-url origin [想要关联的远程仓库地址]想要关联哪个就切换哪个 或者不用每次切换&#xff0c;集中管理&#xff1a; Git->Manage Remotes 点击“”&#xff0c;填入Name和想要关联的远程库地址 每次push时执行命令 git push [为…

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中…

【C++】string类模拟实现(超详细解析,小白必看系列)

模拟实现 C 标准库中的 std::string 类是一个很好的练习&#xff0c;可以帮助深入理解 C 的内存管理和面向对象编程。 1 浅拷贝和深拷贝解析 浅拷贝和深拷贝是对象复制中的两种不同机制&#xff0c;理解它们的区别对于编写高效、无误的代码至关重要。 浅拷贝 (Shallow Copy)…

【ARM】如何通过 KeilMDK 查看芯片的硬件信息

【更多软件使用问题请点击亿道电子官方网站】 文档目标&#xff1a;解决在开发过程中对于开发项目所使用的的芯片的参数查看的问题 问题场景&#xff1a;在项目开发过程中&#xff0c;经常需要对于芯片的时钟、寄存器或者一些硬件参数需要进行确认。大多数情况下是需要外部查找…

12、xinference部署与自定义模型

1、环境创建 创建虚拟环境 conda create --name xinference python3.10.9激活虚拟环境 conda activate xinference2、安装文件 官网&#xff1a;https://inference.readthedocs.io/zh-cn/latest/getting_started/installation.html pip install "xinference[transfor…

什么是站点内部搜索垃圾邮件攻击以及如何防范

过去一年中&#xff0c;我们发现很多WordPress网站遭遇了大规模的SEO垃圾邮件攻击&#xff0c;这些攻击主要针对网站内部的搜索功能。虽然这些攻击对SEO本身的影响不大&#xff0c;但却浪费了大量的时间和资源。 虽然大部分网站可能不需要担心这个问题&#xff0c;但如果你的网…