navicat 17 无内置告警分级机制,所谓“不同告警级别”实为邮件通知开关、日志内容筛选及外部脚本解析三者组合实现;所有界面告警选项仅控制是否发送固定模板邮件,不区分错误类型,真正可控的颗粒度依赖-log参数与自定义脚本对日志的条件判断。

Navicat 17 的告警级别不是在任务里直接设置的
它本身没有「高危告警」「中等提醒」这类分级开关。所谓“不同告警级别”,实际是通过组合三个独立功能实现的:邮件通知开关、日志内容筛选、以及外部脚本对日志的解析逻辑。界面里所有标着“告警”“通知”的选项,底层都只做一件事:是否发送一封固定模板的邮件。
邮件通知只能开或关,不能按错误类型区分
在批处理作业的「计划」页 → 「通知」区域,你只能勾选「启用邮件通知」,填 SMTP 参数和收件人。它不识别 SQL 报错、连接超时、空结果集这些差异,只要任务执行结束(无论成功失败),就会发同一封邮件,标题永远是「Batch Job Completed」或「Batch Job Failed」。
- 想让“导出为空”单独告警?得靠外部脚本读取
navicatcmd.log,匹配Export completed后面是否跟着0 rows exported - 想屏蔽“查询超时但已忽略”的通知?必须关掉整个邮件开关,再用 PowerShell 自己判断
exit code—— 虽然navicatcmd.exe总返回 0,但日志里会有Timeout occurred字样 - SMTP 配置错误时,邮件根本发不出,且无任何提示——这是最常被当成“告警没生效”的真实原因
真正可控的“级别”藏在日志参数和路径里
唯一能影响告警颗粒度的地方,是启动 navicatcmd.exe 时加的 -log 参数。日志级别只有两档:-log(基础)和 -log -verbose(详细)。后者会记录每条 SQL 执行耗时、行数、甚至字段类型,方便你写脚本做条件触发:
- 用
findstr /c:"Error:" "C:\temp\navicatcmd.log"判断是否真出错(比看邮件可靠十倍) - 用
select-string -pattern "Export completed.*\.csv" -path C:\temp\navicatcmd.log确认文件是否真生成 - 日志路径必须绝对且可写,
%APPDATA%在计划任务中常失效,硬写C:\temp\更稳
复杂点在于:Navicat 不负责告警决策,只负责输出原始信号
它把所有执行痕迹平铺进日志,不分类、不聚合、不标记优先级。你要的“不同级别”,本质是你自己写的监控脚本怎么解读这些日志行。比如把 Failed to decrypt password 当作 P0 级立刻电话通知,而 0 rows exported 只写进日报表格——这个逻辑完全不在 Navicat 界面里,而在你调用 navicatcmd.exe 之后的那几行 PowerShell 里。











