You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Postfix自定义过滤器中输出日志进行调试

解决方法分两种常用方案,你可以根据需求选:

方案1:写入自定义日志文件

  • 首先提前创建日志文件并配置正确权限,确保Postfix运行过滤器的用户有写入权限:
# 创建日志文件
touch /var/log/postfix_filter.log
# 授权给Postfix默认运行用户写入权限,如果你配置了专用运行用户就替换成对应的用户组
chown postfix:postfix /var/log/postfix_filter.log
chmod 640 /var/log/postfix_filter.log
  • 要单独记录from_address变量,直接在变量赋值后添加一行日志输出代码即可:
from_address=`grep -m 1 "From:" in.$$ | cut -d "<" -f 2 | cut -d ">" -f 1`
# 新增下面这行写日志
echo "$(date '+%Y-%m-%d %H:%M:%S') 提取发件人地址结果: $from_address" >> /var/log/postfix_filter.log
  • 如果你需要记录脚本所有运行输出、报错信息,不用每条都手动追加日志,直接在脚本开头(#!/bin/sh下方)添加重定向规则即可:
#!/bin/sh
# 新增下面这行,所有标准输出、错误输出都会写入日志
exec >> /var/log/postfix_filter.log 2>&1

方案2:写入系统syslog

不用自行管理日志文件权限、轮转,直接调用系统logger命令即可:

  • 记录from_address的写法:
from_address=`grep -m 1 "From:" in.$$ | cut -d "<" -f 2 | cut -d ">" -f 1`
# 新增下面这行,-t参数指定日志标签方便后续过滤
logger -t postfix_filter "提取发件人地址结果: $from_address"
  • 查看日志的方法:
    • Debian/Ubuntu 系统执行:grep postfix_filter /var/log/syslog
    • RHEL/CentOS 系统执行:grep postfix_filter /var/log/messages

额外排查建议

你当前已经注释了临时文件自动删除的trap规则,可以保持这个注释状态,脚本处理后留下的in.$$临时文件会保存在/var/spool/filter目录下,你可以直接用这个文件手动复现脚本执行逻辑,验证变量提取是否符合预期,很多时候过滤器不生效是因为邮件头的From字段格式和你预设的提取规则不匹配导致的。
内容的提问来源于stack exchange,提问作者philolegein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:06:10