脚本小的时候,一个 MsgBox 就能看出问题;脚本稍微复杂一点,弹窗会打断流程,甚至影响问题复现。学会写日志,是 AHK 脚本从“能跑”到“好排查”的重要一步。
一、MsgBox:最直接,但会阻塞
#Requires AutoHotkey v1.1 #NoEnv #SingleInstance Force value := 123 MsgBox, % "当前 value = " value return
MsgBox 适合验证变量值、确认流程有没有走到某一步。但它会暂停脚本,自动化流程、定时器、窗口操作都可能被它影响。所以它适合临时调试,不适合作为长期日志。
二、ToolTip:轻量显示运行状态
SetTimer, ShowStatus, 1000 return ShowStatus: ToolTip, % "脚本运行中:" A_TickCount return
ToolTip 不会像 MsgBox 那样卡住流程,适合显示当前状态、坐标、窗口标题、循环进度。但 ToolTip 内容会被覆盖,也不方便事后追查。
三、FileAppend:最常用的日志方式
Log("脚本启动")
Log("开始处理任务")
return
Log(msg) {
logFile := A_ScriptDir "\run.log"
FormatTime, now,, yyyy-MM-dd HH:mm:ss
FileAppend, %now% - %msg%`n, %logFile%, UTF-8
}
FileAppend 适合长期记录。脚本出问题后,你可以打开日志文件,看它最后执行到了哪一步、变量是什么、错误发生在什么时候。
四、日志要带时间和级别
Log("INFO", "开始读取配置")
Log("WARN", "没有找到配置,使用默认值")
Log("ERROR", "目标窗口不存在")
return
Log(level, msg) {
logFile := A_ScriptDir "\debug.log"
FormatTime, now,, yyyy-MM-dd HH:mm:ss
FileAppend, %now% [%level%] %msg%`n, %logFile%, UTF-8
}
级别不用太复杂,新手先用 INFO、WARN、ERROR 就够了。真正排查问题时,带级别的日志比一堆普通文本更容易扫。
五、调试面板:运行中实时看日志
如果你不想一直打开日志文件,可以做一个简单 GUI 面板,把最近的日志显示出来。
Gui, Add, Edit, w600 h300 vLogBox ReadOnly
Gui, Show,, AHK 调试面板
AppendLog("脚本启动")
return
AppendLog(msg) {
global LogBox
FormatTime, now,, HH:mm:ss
GuiControlGet, old,, LogBox
GuiControl,, LogBox, % old now " - " msg "`r`n"
}
调试面板适合 GUI 工具、监控脚本、长时间运行的任务。正式使用时仍然建议同时写文件日志,因为 GUI 关闭后内容就没了。
六、日志文件别无限变大
RotateLog(logFile) {
if !FileExist(logFile)
return
FileGetSize, size, %logFile%, K
if (size > 1024) {
FileMove, %logFile%, %logFile%.bak, 1
}
}
常驻脚本要注意日志大小。可以按大小轮转,也可以按日期生成日志文件。不要让一个日志文件写到几百 MB。
七、建议
- 临时看变量用 MsgBox。
- 运行状态用 ToolTip。
- 长期排查用 FileAppend。
- 复杂工具可以加 GUI 调试面板。
- 日志要写时间、级别和关键变量。
- 常驻脚本要限制日志大小。
好日志不是写得越多越好,而是关键步骤、关键分支、错误位置都有记录。出问题时能顺着日志还原现场,就是合格的脚本日志。
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)