`
龙儿筝
  • 浏览: 686 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

鸿蒙封装日志库并支持跳转显示行号

阅读更多

鸿蒙封装日志库并支持跳转显示行号

查看日志时,你是否经常遇到不知道日志是哪个地方打印的,为了便于查找位置,专门将文件名或类名设置为tag,日志还得传个标记,用于生产环境不打印日志,控制台的日志要是能点击定位到所在位置就好了。现在咱们自己来封装一个日志库,实现这些功能。

为什么控制台的日志可以点击跳转

首页我们思考一个问题,什么样的日志可以点击跳转到所在位置呢?为什么这样的日志就可以跳转呢?最常见的场景是当程序崩溃时,我们会查看控制台的报错信息,看一下出错的调用栈,调用栈会显示代码所有文件的行号和位置,示例如下

Reason:TypeError
Error name:TypeError
Error message:Cannot read property length of undefined
Stacktrace:
    at anonymous (products/entry/src/main/ets/entryability/EntryAbility.ets:11:19)
 

我们点击一下文件就可以跳转过去了,是不是我们的日志只要包含文件的具体路径和行列号就行了呢?我们可以手动打印一下这个at anonymous (products/entry/src/main/ets/entryability/EntryAbility.ets:11:19),发现确定可以点击跳转。

如何实现日志的跳转功能

现在我们只要能获取到打印日志时所在文件的行号和列号就可以了。程序出错时,会显示程序的调用栈,在调用栈中,我们可以获取到文件的位置,那我们创建一个Error对象,就可以获取到调用栈了,示例如下

function log(text: string): void {
  if (hilog.isLoggable(0xFF01, 'aloe', hilog.LogLevel.INFO)) {
    const err= new Error(text)
    const msg = err.message + err.stack?.split('\n')[1]
    hilog.info(0xFF01, 'aloe', '%{public}s', msg)
  }
}
 

这里我们不需要完整的调用栈,用换行符分割取第二条,第一条是当前方法,第二条是调用的地方,所以我们取第二条,实际情况由于不同的封装,这里所取的位置会有所不同。

如何屏蔽生产环境不打印日志

一般我们会设置一个参数用于是否屏蔽参数,初始化时判断release环境就屏蔽掉,其实这种方式不太准确,因为我们没上架前,会遇到release环境查看日志的情况,推荐打APP包,准备上架时,将此参数设置为不打印,所以编译时,我们判断下是否打APP包就行了,示例如下,首先在build-profile.json5中设置参数,默认打印日志

{
  "apiType": "stageMode",
  "buildOption": {
    "arkOptions": {
      "buildProfileFields": {
        "LOG_ENABLE": true
      }
    }
  }
}
 

然后在hvigorfile.ts中判断上架环境并设置为不打印日志,示例如下

import { hapTasks, OhosHapContext, OhosPluginId } from '@ohos/hvigor-ohos-plugin'
import { hvigor, getNode } from '@ohos/hvigor'

const entryNode = getNode(__filename)
entryNode.afterNodeEvaluate(node => {
    if (hvigor.getCommandEntryTask()[0] === 'assembleApp') {
        const hapCtx = node.getContext(OhosPluginId.OHOS_HAP_PLUGIN) as OhosHapContext
        const profileOpt = hapCtx.getBuildProfileOpt()
        const fields = profileOpt['buildOption']['arkOptions']['buildProfileFields']
        fields['LOG_ENABLE']=false
        hapCtx.setBuildProfileOpt(profileOpt)
    }
})
 

我们只要在封装的日志库中加上BuildProfile.LOG_ENABLE判断就可以屏蔽线上日志了,同时自己调试时,release环境也能正常查看日志,也不用外部传参了,是不是很方便。

0
0
分享到:
评论

相关推荐

    CRichEditView显示行号的代码

    在本文中,我们将详细介绍如何在CRichEditView中显示行号,并提供相应的代码实现。 标题解释 标题“CRichEditView显示行号的代码”表明本文的主题是关于在CRichEditView中显示行号的代码实现。 描述解释 描述...

    VC行号显示插件 VC显示行号

    VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC...

    VC6.0显示行号的工具.rar

    VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号...

    DBGridEh首列显示行号的Demo

    在默认情况下,DBGridEh并不会自动在首列显示行号。为了实现这一功能,我们需要自定义网格的行为,通常通过重写或扩展控件的某些方法来完成。 1. **创建自定义列**: 首先,我们需要创建一个新的TColumn对象,用于...

    c#实现dataGridview前显示行号

    然而,默认情况下,`DataGridView`控件并不会自动显示行号,这需要我们通过自定义的方式来实现这一功能。下面将详细介绍如何在C#中使用重绘方法来实现在`DataGridView`前面显示行号。 #### 一、准备工作 首先,...

    vc6.0显示行号的方法

    然而,对于现代编程习惯而言,VC6.0存在一些不足之处,比如默认情况下不支持显示代码行号这一功能。本文将详细介绍一种在VC6.0中实现显示行号的方法。 #### 显示行号的重要性 在编程过程中,行号的存在对于提高代码...

    Word插入代码显示行号并高亮着色显示

    在Word中插入代码并实现与IDE(集成开发环境)类似的显示效果,主要是通过设置行号和应用代码高亮样式来实现。以下将详细介绍如何操作。 首先,为了在Word中显示代码行号,你可以采取以下步骤: 1. **插入代码样式...

    VC++6.0显示行号

    "VC显示行号_VC6LineNumberAddin"压缩包文件就提供了这样的插件,旨在帮助用户在IDE中启用行号显示。 首先,你需要下载并安装这个插件。这通常涉及到解压文件到一个合适的目录,然后在VC++6.0的安装目录下找到`Add...

    vc++显示行号小插件

    然而,由于描述中并未提及这些细节,我们只能假设这款"VC++显示行号小插件"专注于提供基本的行号显示服务。 在使用过程中,开发者需要注意插件可能对IDE性能的影响。虽然小插件通常不会带来明显的性能问题,但如果...

    VC6.0显示行号

    通常,VC6.0本身并不支持直接显示行号,但可以通过安装第三方插件来实现这一功能。"VC显示行号_VC6LineNumberAddin"很可能就是一个专门为VC6.0设计的行号显示插件。安装这样的插件一般包括以下几个步骤: 1. **下载...

    利用js高亮代码并显示行号

    "利用js高亮代码并显示行号"的主题就是关于如何使用JavaScript库来实现这个功能的。具体来说,这里提到了一个名为SyntaxHighlighter的工具,它是一个流行的开源代码高亮库,特别适用于博客、教程或任何需要显示代码...

    显示行号(VC6.0)

    对于Visual C++ 6.0(简称VC6.0)这样的经典集成开发环境(IDE),虽然其界面相对简单,但同样支持显示行号功能。在"VC6.0显示行号!~~~~亲测可用~~"的描述中,我们可以理解到这是一个关于如何在VC6.0中启用或确认...

    vc6.0显示行号的工具

    然而,VC6.0默认并不显示代码编辑器中的行号,这可能会给开发者带来不便。因此,"vc6.0显示行号的工具"是为了满足这种需求而诞生的插件或扩展,它允许用户在VC6.0中启用行号显示,提高编程效率。 首先,我们需要...

    textarea显示行号

    这个插件的工作原理主要是通过监听`textarea`中的内容变化,动态计算每一行的起始位置,并在`textarea`旁边创建一个虚拟的区域来显示这些行号。当用户输入、删除或者复制粘贴文本时,插件会自动更新行号,保持与`...

    vc6.0显示行号

    VC6.0显示行号的插件,很好很强大的显行号插件,使用VC6.0编程的朋友再也不用烦恼没有行号的编程环境了。 VC显示行号插件使用说明: 1. 如果你的VC安装在C盘,请拷贝文件VC6LineNumberAddin.dll到如下目录: C:\...

    代码编辑器,显示行号

    总之,CodeMirror作为一个强大的JavaScript代码编辑器插件,它的显示行号、可定制样式和主题等功能,为开发者提供了高效的编码环境。无论是个人项目还是团队协作,CodeMirror都是一个值得信赖的工具。通过下载并解压...

    VC6显示行号插件免费下载

    通常,这种类型的插件会包含一些DLL动态链接库文件,一个设置向导或者一个注册脚本,用于在VC6环境中添加行号显示功能。安装过程可能涉及复制相关文件到VC6的安装目录,或者执行注册脚本来修改IDE的配置。 对于VC6...

    VC6显示行号_VC6LineNumberAddin(修改版)

    VC++ 6.0,作为一款经典的集成开发环境(IDE),原生并不支持直接显示代码行号,这为程序员的日常工作带来了一定的不便。为了弥补这一不足,开发者们制作了各种插件,其中“VC6LineNumberAddin”就是一个专门针对...

    VC显示行号插件

    【VC显示行号插件】是一款专为Visual C++ 6.0(简称VC6.0)设计的增强工具,它允许用户在编程环境中查看代码的行号,从而提高代码定位和调试的效率。在VC6.0的时代,虽然这款IDE在功能上可能不及现代的开发环境丰富...

    VC6.0显示行号插件

    然而,VC6.0原生版本并不直接支持在编辑器中显示代码行号。为了解决这个问题,开发者们制作了各种插件,其中“VC显示行号插件”就是一种实用工具,能够使VC6.0在源代码编辑窗口显示行号,提高编码效率。 该插件名为...

Global site tag (gtag.js) - Google Analytics