高效管理syslog日志需控制格式与去向:定义结构化模板(如richformat)、按程序或facility分离日志文件、配置动态日期路径实现自动轮转,并通过语法检查、重启服务和测试日志验证生效。

想让 Syslog 日志更清晰、更易管理,关键不在堆日志量,而在控制格式和去向。HSAK 等系统默认走 /var/log/messages,但混在一起难定位;按需分离、带结构化字段、自动归档,才是高效运维的起点。
定义可读性强的日志模板
rsyslog 支持用 $template 或 template() 定义输出样式。推荐使用现代语法(rsyslog v8+),兼顾兼容性和扩展性:
- 基础时间+来源+内容:`template(name="SimpleFormat" type="string" string="%timegenerated% %hostname% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n")`
- 增强版(含优先级与程序名):`template(name="RichFormat" type="string" string="%timestamp:::date-rfc3339% %hostname% %app-name%[%procid%]: %msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n")`
- 模板名区分大小写,后续规则中需严格一致;
%msg:::drop-last-lf%可避免日志末尾多出空行
按程序或模块分离日志文件
别把所有日志塞进一个文件。利用 $programname 或 facility 过滤,定向输出:
- HSAK 日志带
LibStorage标签,可用:if $programname == 'LibStorage' then /var/log/hvak.log;RichFormat &~ - 数据库日志常用
local0设施,配置:local0.* /var/log/db/postgres.log;SimpleFormat -
&~表示匹配后不再继续处理,防止重复写入其他文件
按日期自动轮转与归档
避免单个日志无限增长,用动态路径实现每日切分:
- 定义路径模板:
template(name="DailyPath" type="string" string="/var/log/custom/%$YEAR%-%$MONTH%-%$DAY%.log") - 绑定规则:
*.* ?DailyPath;SimpleFormat - 注意:
?表示使用模板生成路径,%$YEAR%等变量由 rsyslog 运行时解析,无需手动创建目录
验证与生效不跳步
改完配置不是重启就完事,得确认它真按你想的在跑:
- 先语法检查:
sudo rsyslogd -N1(返回 0 表示无误) - 重启服务:
sudo systemctl restart rsyslog - 触发一条测试日志:
logger -t "TestApp" "hello from $(hostname)" - 立即查看目标文件:
tail -n1 /var/log/custom/$(date +%F).log,核对时间、主机名、标签是否匹配










