DevEco Studio 日志建议
DevEco Studio 日志建议 控制台console.log日志打印很不好观察,当打印的日志是个对象的时候,很不好观察其结构,必须要用工具格式化才能看清楚层级关系。如果对象里的数据过多时,console.log日志会显示不全

拖老长了,这边能优化一下嘛
【解决方案】
开发者您好,可以启用Soft-Wrap功能以实现日志消息的自动换行。参考DevEco Studio中如何设置超长日志自动换行。
楼主不要那么麻烦的去设置日志的打印格式,只要调整一下日志窗口的展示内容就好了,如图:

楼主可以自己构建一个日志工具类来格式化日志:
JSON.stringify(res,null,2)
自定义 MyLogger 日志打印
import std.time.*
import std.io.{OutputStream, BufferedOutputStream}
import std.console.Console
import std.time.DateTime
import log.{Logger, Attr, LogRecord, LogLevel}
import log
main() {
// 创建一个输出到终端的 MyLogger
let logger = MyLogger(Console.stdOut)
logger.warn("出现了一个 warn 信息!")
logger.log(LogLevel.ERROR, "出现了一个 ERROR 信息!")
logger.debug("出现了一个 debug 信息!但是因为 MyLogger 的默认 LogLevel 是 DEBUG 所以这里不会输出日志~")
}
// Logger 是抽象类需要自己实现
public class MyLogger <: Logger {
let bo: BufferedOutputStream<OutputStream>
// 默认日志级别
var _level = LogLevel.INFO
public init(output: OutputStream) {
bo = BufferedOutputStream<OutputStream>(output)
}
public mut prop level: LogLevel {
get() {
_level
}
set(v) {
_level = v
}
}
public func withAttrs(attrs: Array<Attr>): Logger {
return this
}
public func log(level: LogLevel, message: String, attrs: Array<Attr>): Unit {
if (this.enabled(level)) {
let record: LogRecord = LogRecord(DateTime.now(), level, message, attrs)
log(record)
}
}
public func log(level: LogLevel, message: () -> String, attrs: Array<Attr>): Unit {
if (this.enabled(level)) {
let record: LogRecord = LogRecord(DateTime.now(), level, message(), attrs)
log(record)
}
}
public func log(record: LogRecord): Unit {
bo.write("time = ${record.time} level = ${record.level} msg = ${record.message}\n".toArray())
bo.flush()
}
public func isClosed(): Bool {
false
}
public func close(): Unit {
}
}
效果
time = 2025-07-31T20:00:53.6899709+08:00 level = WARN msg = 出现了一个 warn 信息!
time = 2025-07-31T20:00:53.6900527+08:00 level = ERROR msg = 出现了一个 ERROR 信息!
推荐使用三方库: https://ohpm.openharmony.cn/#/cn/deta il/@abner%2Flog
解决方式:
可以点你自己的头像,看到如下图,选择“我的工单”,去提一个DevEco Studio 日志建议的工单。

你好,json字符串可使用 JSON.stringify 来美化打印,通过第三个参数控制缩进空格。
// 美化打印(缩进 2 个空格,推荐)
console.log(JSON.stringify(user, null, 2));
/* 输出:
{
"name": "张三",
"age": 25,
"address": {
"city": "北京"
}
}
*/
DevEco Studio日志功能提供应用运行时的详细记录,包括系统事件、错误信息和性能数据。日志级别分为Verbose、Debug、Info、Warn、Error,可通过HiLog API输出。在Log窗口查看实时日志,支持按进程、标签和级别过滤。日志文件存储在设备的/data/log/目录下,可使用hdc命令导出分析。
针对DevEco Studio中console.log打印对象可读性差的问题,目前确实存在。这主要是由于控制台默认以字符串形式展开复杂对象,而非提供交互式树状视图。
核心原因与现状:
- 默认行为:DevEco Studio的控制台(基于IntelliJ平台)对
console.log输出的对象,默认采用toString()或类似方式渲染,导致嵌套结构被压缩成一行,难以阅读。 - 数据截断:长字符串或大对象在控制台输出时会被截断,这是平台为防止控制台过载的默认限制。
现有解决方案(非官方优化,但可立即使用):
- 使用
JSON.stringify()格式化:
在打印时手动格式化,可以清晰展示层级。console.log(JSON.stringify(yourObject, null, 2)); // 缩进2空格 - 使用多个
console.log:
对大型对象,可分属性打印。 - 使用
console.dir()(如支持):
部分运行环境可能支持以交互式树状结构显示对象,但依赖运行时环境支持。
建议的优化方向(供开发团队参考):
- 增强控制台对象渲染器:
为ArkTS/JavaScript对象实现交互式树状视图,支持展开/折叠节点,类似Chrome DevTools。 - 提供日志格式化开关:
在控制台设置中增加选项,允许自动格式化对象输出。 - 优化截断策略:
提供可配置的截断长度,或允许点击展开完整内容。
当前,推荐使用JSON.stringify()作为临时解决方案,以提升日志可读性。希望未来版本能原生支持更友好的对象调试输出。


