如何在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
- Debian/Ubuntu 系统执行:
额外排查建议
你当前已经注释了临时文件自动删除的trap规则,可以保持这个注释状态,脚本处理后留下的in.$$临时文件会保存在/var/spool/filter目录下,你可以直接用这个文件手动复现脚本执行逻辑,验证变量提取是否符合预期,很多时候过滤器不生效是因为邮件头的From字段格式和你预设的提取规则不匹配导致的。
内容的提问来源于stack exchange,提问作者philolegein
相关产品推荐
相关产品推荐

