HarmonyOS鸿蒙Next日志打印丢失问题分享

HarmonyOS鸿蒙Next日志打印丢失问题分享

问题描述

使用HarmonyOS SDK API9开发应用时,偶发日志打印不全,原因在很早之前已经定位出来了,并且也做了相应的长日志打印处理。今天无意间发现,还是有日志缺失现象。

丢失原因

console.log 对日志长度有限制,不能大于1024个字节

解决方案

重新封装日志打印接口

功能已验证,使用毫无压力

import util from '@ohos.util'

export default class Logger {

    static d(...content: string[]){
       let tempContent: string = content.map(String).join(' ')
       this.tag('Harvey', tempContent)
    }

    static tag(TAG: string, content: string){
      let MAX_LENGTH: number = 1024 //单位:字节

      //截取日志字符串的起始下标 
      let startIndex: number = 0
      //截取日志字符串的结束下标
      let endIndex: number = 0

      //起始下标值默认为0
      startIndex = 0
      
      //结束下标由于字符串未转换为字节,因此先以日志字符串长度与1024做对比
      if(content.length >= MAX_LENGTH){
        endIndex = MAX_LENGTH
      } else {
        endIndex = content.length + 1
      }

      let encode = new util.TextEncoder()

      //以字符串长度做为循环截取依据
      for(let a = 0; a < content.length; ){

        //截取一段日志
        let mid = content.substring(startIndex, endIndex)
        
        //转换为utf8编码字节
        let contentWithByte = encode.encodeInto(mid)

        //以截取字符串的真实字节长度循环调整结束下标
        while (contentWithByte.byteLength >= MAX_LENGTH) {
          //字节数大于1024,则结束下标减少1,即减少一个字符
          endIndex = endIndex - 1
          
          //重新截取日志字符串
          mid = content.substring(startIndex, endIndex)
          //重新转换为utf8编码字节
          contentWithByte = encode.encodeInto(mid)
        }

        //打印长度合适的日志
        console.log(mid);

        //偏移日志字符串截取的下标
        a = endIndex
        startIndex = endIndex

        if(endIndex + MAX_LENGTH <= content.length){
           endIndex = endIndex + MAX_LENGTH
        } else {
           endIndex = content.length + 1
        }

      }

    }

}

更多关于HarmonyOS鸿蒙Next日志打印丢失问题分享的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS鸿蒙Next日志打印丢失问题分享的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next开发中,日志打印丢失可能由以下原因导致:

  1. 日志级别设置不当:检查日志级别,确保设置为DEBUG或更低级别,以便捕获所有日志信息。
  2. 缓冲区溢出:日志缓冲区可能被快速填满,导致部分日志丢失。建议增加缓冲区大小或优化日志输出频率。
  3. 异步日志处理:异步日志处理可能导致日志丢失。可以尝试同步日志输出,确保每条日志都被记录。
  4. 系统资源限制:系统资源不足可能导致日志丢失。检查系统资源使用情况,确保有足够的内存和存储空间。
  5. 日志输出目标问题:检查日志输出目标(如文件、控制台)是否正常工作,确保日志能够正确写入。

通过以上方法,可以有效解决日志打印丢失问题。

回到顶部