我正在开发一个脚本,我需要打印日志来调试脚本,请问打印的日志文件存放在哪?我需要将所有日志复制出来。

已存档
ltknnk6lvw · 2 个月前
第 1 条补充
·
2 个月前

那么脚本控制台的日志我可以一次性复制或者导出吗?还有我使用censole.show 打开的悬浮日志框,是否可以控制里面最多刷新多少条日志,超出的就覆盖旧日志?

回答

Hamibot AI
1
· 2 个月前

在Hamibot中,可以通过以下几种方式处理日志文件:

1. 默认打印到控制台

使用console.log()打印的内容默认显示在脚本控制台,不会自动保存到文件。

2. 自定义日志文件路径

可以通过以下代码将日志保存到指定路径(如/sdcard/):

// 文档地址 https://docs.hamibot.com/
console.setGlobalLogConfig({
    file: '/sdcard/1.txt', // 自定义存储路径
    maxBackupSize: 5,      // 可选:日志备份数量
    maxFileSize: 512 * 1024 // 可选:单个日志文件大小限制(512KB)
});

console.log("测试日志"); // 内容会同时显示在控制台并写入文件
hamibot.exit();

3. 推荐的自定义日志模块

更完整的本地日志解决方案:

// 文档地址 https://docs.hamibot.com/
const LOG_DIR = '/sdcard/hamibot_logs/';
const LOG_FILE = LOG_DIR + new Date().toISOString().slice(0, 10) + '.log';

if (!files.exists(LOG_DIR)) {
    files.ensureDir(LOG_DIR);
}

function writeLog(message) {
    const logEntry = `[${new Date().toLocaleString()}] ${message}\n`;
    files.append(LOG_FILE, logEntry);
    console.log(logEntry.trim());
}

writeLog("调试信息");
hamibot.exit();

获取日志文件

通过上述方法生成的日志文件:

  • 会保存在你指定的路径(如/sdcard/1.txt/sdcard/hamibot_logs/
  • 可直接用文件管理器访问手机存储复制出来
  • 通过adb pull /sdcard/1.txt命令导出到电脑

注:Android 11及以上版本可能需要启用"所有文件访问"权限才能访问/sdcard/目录。


补充回答 1

关于控制台日志的导出和悬浮窗日志管理:

一、控制台日志导出方案

1. 导出脚本控制台全部日志

// 文档地址 https://docs.hamibot.com/
let logs = console.getLogs(); // 获取当前会话所有日志
files.write('/sdcard/console_logs.txt', logs.join('\n'));
toast('日志已保存到/sdcard/console_logs.txt');
hamibot.exit();

2. 实时同步日志到文件(推荐)

console.setGlobalLogConfig({
    file: '/sdcard/auto_log.txt',
    maxBackupSize: 3,
    filePattern: '%d{HH:mm:ss} %-5p - %m%n'
});

二、悬浮窗日志数量控制

1. 通过反射限制显示行数

console.show();
ui.run(function(){
    let clazz = runtime.console.getClass();
    let field = clazz.getDeclaredField('mConsoleView');
    field.setAccessible(true);
    let consoleView = field.get(runtime.console).get();
    
    // 控制最大显示行数(100行)
    consoleView.setMaxLines(100); 
    // 自动滚屏
    consoleView.setOverScrollMode(android.view.View.OVER_SCROLL_ALWAYS);
});

2. 定时清空旧日志

setInterval(function(){
    if(console.getLogs().length > 500){
        console.clear();
        console.log('--- 自动清理旧日志 ---');
    }
}, 5000);

三、进阶方案:自定义日志窗口

let fw = floaty.rawWindow(
    <frame>
        <console id="console" maxLines="50"/>
    </frame>
);
fw.setSize(400, 300);
fw.console.setConsole(runtime.console);

// 自定义日志格式
console.setGlobalLogConfig({
    filePattern: '[%d{MM-dd HH:mm}] %m%n'
});

关键说明:

  1. maxLines属性可直接限制显示行数
  2. 超过限制会自动顶替最旧的日志
  3. 通过console.getLogs()可获取完整日志历史
  4. 建议配合setGlobalLogConfig把日志持久化到文件

(悬浮窗操作需要安卓悬浮窗权限)

ℹ️ 本回答由 AI 生成,内容仅供参考