HarmonyOS NEXT实战:日志工具

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本文介绍了在HarmonyOS Next应用开发中,如何封装一个简单易用的日志工具LoggerKit。通过使用系统提供的HiLog API,开发者可以灵活输出不同级别的日志信息(DEBUG、INFO、WARN、ERROR、FATAL),用于分析应用运行状态和调试逻辑问题。文章详细说明了日志级别、参数配置及使用注意事项,并提供了完整的TypeScript封装示例代码,便于实际项目集成与应用调试。

HarmonyOS Next实战##HarmonyOS SDK应用服务##教育

目标:封装日志工具,实现日志工具简单可用。

在应用开发过程中,可在关键代码处输出日志信息。在运行应用后,通过查看日志信息来分析应用执行情况(如应用是否正常运行、代码运行时序、运行逻辑分支是否正常等)。

系统提供不同的API供开发者调用并输出日志信息,即HiLog与console。两个API在使用时略有差异,本文重点介绍HiLog的用法,console的具体用法可查看API参考console。

HiLog中定义了DEBUG、INFO、WARN、ERROR、FATAL五种日志级别,并提供了对应的方法输出不同级别的日志。

参数解析

  • domain:用于指定输出日志所对应的业务领域,取值范围为0x0000~0xFFFF,开发者可以根据需要进行自定义。
  • tag:用于指定日志标识,可以为任意字符串,建议标识调用所在的类或者业务行为。tag最多为31字节,超出后会截断,不建议使用中文字符,可能出现乱码或者对齐问题。
  • level:用于指定日志级别。取值见LogLevel。
  • format:格式字符串,用于日志的格式化输出。日志打印的格式化参数需按照“%{private flag}specifier”的格式打印。

说明

  • isLoggable()和具体日志打印接口使用的domain和tag应保持一致。
  • isLoggable()使用的level,应和具体日志打印接口级别保持一致。

约束与限制:日志最多打印4096字节,超出限制文本将被截断。

实战:

import {
    hilog } from '@kit.PerformanceAnalysisKit';

/**
 * 日志级别
 */
export enum LogLevel {
   
  debug = "debug",
  info = "info",
  warn = 'warn',
  error = "error"
}

/**
 * 日志工具
 * ###待考虑:设置打印日志级别
 */
export class LoggerKit {
   
  private domain: number;
  private prefix: string;
  private enableLogLevels: LogLevel[];

  /**
   * 日志记录器工具
   * @param domain 域,默认:0xABCD
   * @param prefix 前缀,默认:LoggerKit
   * @param enableLogLevels 启用日志级别,默认:全部启用
   */
  constructor(domain: number = 0xABCD, prefix: string = 'LoggerKit',
    enableLogLevels = [LogLevel.debug, LogLevel.info, LogLevel.warn, LogLevel.error]) {
   
    this.domain = domain;
    this.prefix = prefix;
    this.enableLogLevels = enableLogLevels;
  }

  debug(...args: string[]) {
   
    if (this.enableLogLevels.includes(LogLevel.debug)) {
   
      hilog.debug(this.domain, this.prefix, getFormat(args), args);
    }
  }

  info(...args: string[]) {
   
    if (this.enableLogLevels.includes(LogLevel.info)) {
   
      hilog.info(this.domain, this.prefix, getFormat(args), args);
    }
  }

  warn(...args: string[]) {
   
    if (this.enableLogLevels.includes(LogLevel.warn)) {
   
      hilog.warn(this.domain, this.prefix, getFormat(args), args);
    }
  }

  error(...args: string[]) {
   
    if (this.enableLogLevels.includes(LogLevel.error)) {
   
      hilog.error(this.domain, this.prefix, getFormat(args), args);
    }
  }

  static LK_domain: number = 0xABCD;
  static LK_prefix: string = 'LoggerKit';
  static LK_enableLogLevels: LogLevel[] = [LogLevel.debug, LogLevel.info, LogLevel.warn, LogLevel.error];

  static debug(...args: string[]) {
   
    if (LoggerKit.LK_enableLogLevels.includes(LogLevel.debug)) {
   
      hilog.debug(LoggerKit.LK_domain, LoggerKit.LK_prefix, getFormat(args), args);
    }
  }

  static info(...args: string[]) {
   
    if (LoggerKit.LK_enableLogLevels.includes(LogLevel.info)) {
   
      hilog.info(LoggerKit.LK_domain, LoggerKit.LK_prefix, getFormat(args), args);
    }
  }

  static warn(...args: string[]) {
   
    if (LoggerKit.LK_enableLogLevels.includes(LogLevel.warn)) {
   
      hilog.warn(LoggerKit.LK_domain, LoggerKit.LK_prefix, getFormat(args), args);
    }
  }

  static error(...args: string[]) {
   
    if (LoggerKit.LK_enableLogLevels.includes(LogLevel.error)) {
   
      hilog.error(LoggerKit.LK_domain, LoggerKit.LK_prefix, getFormat(args), args);
    }
  }
}

function getFormat(args: string[]) {
   
  let format = ''
  for (let i = 0; i < args.length; i++) {
   
    if (i == 0) {
   
      format = '%{public}s'
    } else {
   
      format += ', %{public}s'
    }
  }
  return format
}
相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
4月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:外卖App
仓颉语言实战分享,教你如何用仓颉开发外卖App界面。内容包括页面布局、导航栏自定义、搜索框实现、列表模块构建等,附完整代码示例。轻松掌握Scroll、List等组件使用技巧,提升HarmonyOS应用开发能力。
|
3月前
|
移动开发 前端开发 JavaScript
鸿蒙NEXT时代你所不知道的全平台跨端框架:CMP、Kuikly、Lynx、uni-app x等
本篇基于当前各大活跃的跨端框架的现状,对比当前它们的情况和未来的可能,帮助你在选择框架时更好理解它们的特点和差异。
312 0
|
4月前
|
安全 API 开发工具
【HarmonyOS NEXT】一键扫码功能
这些Kit为我们应用开发提升了极大地效率。很多简单的功能,如果不需要太深的定制化需求,直接调用kit提供的API就可以实现,在android或者ios上需要很多代码才能实现的功能效果。
119 0
HarmonyOS NEXT仓颉开发语言实战案例:电影App
周末好!本文分享使用仓颉语言重构ArkTS实现的电影App案例,对比两者在UI布局、组件写法及语法差异。内容包括页面结构、列表分组、分类切换与电影展示等。通过代码演示仓颉在HarmonyOS开发中的应用。##仓颉##ArkTS##HarmonyOS开发
|
4月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:健身App
本期分享一个健身App首页的布局实现,顶部采用Stack容器实现重叠背景与偏移效果,列表部分使用List结合Scroll实现可滚动内容。代码结构清晰,适合学习HarmonyOS布局技巧。
HarmonyOS NEXT仓颉开发语言实战案例:小而美的旅行App
本文分享了一个旅行App首页的设计与实现,使用List容器搭配Row、Column布局完成个人信息、功能列表及推荐模块的排版,详细展示了HarmonyOS下的界面构建技巧。
|
18天前
|
存储 缓存 5G
鸿蒙 HarmonyOS NEXT端云一体化开发-云存储篇
本文介绍用户登录后获取昵称、头像的方法,包括通过云端API和AppStorage两种方式,并实现上传头像至云存储及更新用户信息。同时解决图片缓存问题,添加上传进度提示,支持自动登录判断,提升用户体验。
90 0
|
18天前
|
存储 负载均衡 数据库
鸿蒙 HarmonyOS NEXT端云一体化开发-云函数篇
本文介绍基于华为AGC的端云一体化开发流程,涵盖项目创建、云函数开通、应用配置及DevEco集成。重点讲解云函数的编写、部署、调用与传参,并涉及环境变量设置、负载均衡、重试机制与熔断策略等高阶特性,助力开发者高效构建稳定云端服务。
178 0
鸿蒙 HarmonyOS NEXT端云一体化开发-云函数篇
|
18天前
|
存储 JSON 数据建模
鸿蒙 HarmonyOS NEXT端云一体化开发-云数据库篇
云数据库采用存储区、对象类型、对象三级结构,支持灵活的数据建模与权限管理,可通过AGC平台或本地项目初始化,实现数据的增删改查及端侧高效调用。
50 0
|
18天前
|
存储 开发者 容器
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
本文介绍了ArkTS语言中的Class类、泛型、接口、模块化、自定义组件及状态管理等核心概念,并结合代码示例讲解了对象属性、构造方法、继承、静态成员、访问修饰符等内容,同时涵盖了路由管理、生命周期和Stage模型等应用开发关键知识点。
150 0
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例