我正在开发一个脚本,我需要打印日志来调试脚本,请问打印的日志文件存放在哪?我需要将所有日志复制出来。
第 1 条补充
· 2 个月前
那么脚本控制台的日志我可以一次性复制或者导出吗?还有我使用censole.show 打开的悬浮日志框,是否可以控制里面最多刷新多少条日志,超出的就覆盖旧日志?
回答
在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'
});
关键说明:
maxLines
属性可直接限制显示行数- 超过限制会自动顶替最旧的日志
- 通过
console.getLogs()
可获取完整日志历史 - 建议配合
setGlobalLogConfig
把日志持久化到文件
(悬浮窗操作需要安卓悬浮窗权限)
ℹ️ 本回答由 AI 生成,内容仅供参考