网站首页 > 技术教程 正文
查看日志时,你是否经常遇到不知道日志是哪个地方打印的,为了便于查找位置,专门将文件名或类名设置为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环境也能正常查看日志,也不用外部传参了,是不是很方便。
猜你喜欢
- 2024-11-17 电视看着看着就跳回主页怎么回事?内存该清清了
 - 2024-11-17 动态首页:超灵活体验,随心而变(4008188080/95738指南针动态全赢体验版)
 - 2024-11-17 Windows版Xbox应用迎来全新主页:包含游戏、优惠、推荐等内容
 - 2024-11-17 长虹智能电视开机进入开机直达的方法
 - 2024-11-17 奕控教育|触摸屏画面切换和模板的概念
 - 2024-11-17 如何通过网上国网APP查询日用电量
 - 2024-11-17 R星官网移除《Agent》图标 网址跳转R星主页
 - 2024-11-17 短信跳转小程序首页和指定页面?跳转小程序有哪些类型?
 - 2024-11-17 原域名所有页面都跳转到新域页首页会有什么影响?
 - 2024-11-17 创建页面并实现无刷新页面跳转(创建新的页面)
 
欢迎 你 发表评论:
- 10-23Excel计算工龄和年份之差_excel算工龄的公式year
 - 10-23Excel YEARFRAC函数:时间的"年份比例尺"详解
 - 10-23最常用的10个Excel函数,中文解读,动图演示,易学易用
 - 10-23EXCEL中如何计算截止到今日(两个时间中)的时间
 - 10-2390%人不知道的Excel神技:DATEDIF 精准计算年龄,告别手动算错!
 - 10-23计算工龄及工龄工资(90%的人搞错了):DATE、DATEDIF组合应用
 - 10-23Excel中如何计算工作日天数?用这两个函数轻松计算,附新年日历
 - 10-23怎样快速提取单元格中的出生日期?用「Ctrl+E」批量搞定
 
- 最近发表
 - 
- Excel计算工龄和年份之差_excel算工龄的公式year
 - Excel YEARFRAC函数:时间的"年份比例尺"详解
 - 最常用的10个Excel函数,中文解读,动图演示,易学易用
 - EXCEL中如何计算截止到今日(两个时间中)的时间
 - 90%人不知道的Excel神技:DATEDIF 精准计算年龄,告别手动算错!
 - 计算工龄及工龄工资(90%的人搞错了):DATE、DATEDIF组合应用
 - Excel中如何计算工作日天数?用这两个函数轻松计算,附新年日历
 - 怎样快速提取单元格中的出生日期?用「Ctrl+E」批量搞定
 - Excel日期函数之DATEDIF函数_excel函数datedif在哪里
 - Excel函数-DATEDIF求司龄_exceldatedif函数计算年龄
 
 
- 标签列表
 - 
- 下划线是什么 (87)
 - 精美网站 (58)
 - qq登录界面 (90)
 - nginx 命令 (82)
 - nginx .http (73)
 - nginx lua (70)
 - nginx 重定向 (68)
 - Nginx超时 (65)
 - nginx 监控 (57)
 - odbc (59)
 - rar密码破解工具 (62)
 - annotation (71)
 - 红黑树 (57)
 - 智力题 (62)
 - php空间申请 (61)
 - 按键精灵 注册码 (69)
 - 软件测试报告 (59)
 - ntcreatefile (64)
 - 闪动文字 (56)
 - guid (66)
 - abap (63)
 - mpeg 2 (65)
 - column (63)
 - dreamweaver教程 (57)
 - excel行列转换 (56)
 
 

本文暂时没有评论,来添加一个吧(●'◡'●)