问题描述
使用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
}
}
}
}