Cocos 3.x插件如何获取最新的日志消息?

官方在Cocos 3.x 插件中提供了 Editor.Logger.query() 这个方法来获取日志(详见Logger文档),然而该方法返回的是全部日志,而不是最新的日志。当日志数量很多时,调用该方法就会很耗时。


我在 消息系统文档中看见了console:logsUpdate这个消息事件,然而它触发后返回的是如下内容,并没有最新消息:

{ log: 109, warn: 0, error: 0, info: 31 }

我也尝试使用Electron中webContents的 console-message进行监听,但是只能获取到部分消息,游戏运行中的console.log()日志无法获取到。

let allwins = electron.BrowserWindow.getAllWindows()
for (let i = 0; i < allwins.length; i++) {
    let webContents = allwins[i].webContents
    webContents.on('console-message', (event, level, message, line, sourceId)=>{
        if (level == 0) {
            console.log(`000 ${level} ${message}`)
        }
        else if (level == 1) {
            console.info(`111 ${level} ${message}`)
        }
        else if (level == 2) {
            console.warn(`222 ${level} ${message}`)
        }
        else if (level == 3) {
            console.error(`333 ${level} ${message}`)
        }
        
    })
}

我在这篇帖子中发现Cocos 2.x插件似乎有这么一个获取最新日志消息的事件(并未测试)。
image

请问下官方,Cocos 3.x插件有没有一个能够获取最新一条日志消息的事件或方法?
@panda @jare

已测试,2.x中的以下事件都能够获得对应类型的最新的一条日志消息

editor:console-log
editor:console-success
editor:console-failed
editor:console-info
editor:console-warn
editor:console-error

但翻遍了整个文档和论坛,3.x都找不到这些。

3.8.0 开始,可以用这个事件监听新的消息Editor.Logger.__protected__.on('record', methods.record);

第一个参数就是 log 本身,不过这个 API 目前还处于私有状态,不排除将来进行变更哈。

如果是第一次启动插件时,要获取之前的所有 log,可以用
const list = await Editor.Logger.query();

1赞