
如何在rsyslog.conf中配置日志的输出格式?
- 来源:本站
- 编辑: 超级管理员
- 时间:2025-06-19 13:49:58
- 阅读0次
在rsyslog.conf中配置日志输出格式需要利用其模板(Template)功能,通过自定义模板可以灵活定义日志的时间戳、优先级、来源等字段的展示方式。以下是详细的配置步骤和常用示例:
一、rsyslog 日志格式的基本组成
日志格式通常包含以下元素:
时间戳(如2025-06-19 14:30:00)
日志级别(如WARNING)
来源标识(如sshd[1234])
日志内容(如Failed password for root)
rsyslog 支持两种模板语法:
旧式模板(String Template):使用文本和占位符组合
新式模板(XML Template):基于$!语法的更灵活格式
二、配置模板的步骤
1. 定义模板(在 rsyslog.conf 中添加)
模板需在日志规则前定义,格式为:
plaintext
$template <模板名称>, "<模板内容>"
常用占位符:
%TIMESTAMP%:时间戳(默认格式YYYY-MM-DD HH:MM:SS)
%PRI%:日志优先级(如14,对应warning)
%syslogtag%:来源标识(如sshd[1234]:)
%msg%:日志内容
%HOSTNAME%:主机名
%PID%:进程 ID
2. 应用模板到日志规则
在日志输出目标中引用模板:
plaintext
<设施>.<级别> :omfile:outputfile="日志路径",template="<模板名称>"
三、常见模板配置示例
1. 标准系统日志格式(默认格式)
bash
# 定义模板
$template SystemLogFormat,"%TIMESTAMP% %HOSTNAME% %syslogtag% %msg%\n"
# 应用到系统日志
*.info;mail.none;authpriv.none;cron.none :omfile:outputfile="/var/log/messages",template="SystemLogFormat"
输出示例:
2025-06-19 14:30:00 myserver sshd[1234]: Failed password for root
2. JSON 格式(便于日志分析工具处理)
bash
$template JSONFormat,"{\"time\":\"%TIMESTAMP%\",\"host\":\"%HOSTNAME%\",\"level\":\"%syslogseverity-text%\",\"tag\":\"%syslogtag%\",\"message\":\"%msg%\"}\n"
# 应用到自定义日志
daemon.warning :omfile:outputfile="/var/log/daemon_json.log",template="JSONFormat"
输出示例:
{"time":"2025-06-19 14:30:00","host":"myserver","level":"WARNING","tag":"sshd[1234]:","message":"Failed password for root"}
3. 精简格式(仅时间和内容)
bash
$template SimpleFormat,"%TIMESTAMP% %msg%\n"
# 应用到调试日志
daemon.debug :omfile:outputfile="/var/log/debug_simple.log",template="SimpleFormat"
输出示例:
2025-06-19 14:30:00 Connection established from 192.168.1.1
4. 带进程 ID 和级别的详细格式
bash
$template VerboseFormat,"%TIMESTAMP% [%PRI%] %HOSTNAME% %syslogtag% PID:%PID% | %msg%\n"
# 应用到错误日志
*.error :omfile:outputfile="/var/log/error_verbose.log",template="VerboseFormat"
输出示例:
2025-06-19 14:30:00 [16] myserver httpd[5678]: PID:5678 | Server error: unable to open config file
四、高级格式配置技巧
1. 自定义时间戳格式
通过%TIMESTAMP:::date-format%指定格式:
bash
$template CustomTimeFormat,"%TIMESTAMP:::date-format=%Y-%m-%d %H:%M:%S.%q% %z% %msg%\n"
# %q%:毫秒部分,%z%:时区
2. 转义特殊字符
在模板中使用反斜杠\转义特殊字符:
bash
$template EscapedFormat,"%TIMESTAMP% \[%PRI%\] %msg%\n" # 转义方括号
3. 条件化格式(根据日志级别切换模板)
结合if-else语句:
bash
$template DebugFormat,"[DEBUG] %TIMESTAMP% %msg%\n"
$template ErrorFormat,"[ERROR] %TIMESTAMP% %msg%\n"
if $syslogseverity == 7 then :omfile:outputfile="/var/log/debug.log",template="DebugFormat"
else if $syslogseverity >= 3 then :omfile:outputfile="/var/log/error.log",template="ErrorFormat"
五、配置生效与验证
重启 rsyslog 服务
bash
systemctl restart rsyslog # CentOS/RHEL
service rsyslog restart # Debian/Ubuntu
验证日志格式
查看日志文件:
bash
tail -n 5 /var/log/messages # 检查系统日志格式
生成测试日志(可选):
bash
logger "这是一条测试日志"
六、注意事项
模板名称唯一性
不同模板不能重名,建议使用有意义的命名(如ApacheJSONFormat)。
性能影响
复杂格式(如 JSON)会增加 CPU 开销,生产环境建议按需选择。
避免在模板中使用过多占位符或嵌套结构。
多行日志处理
若日志内容包含换行符,需在模板中添加\n确保每行独立,或使用%msg:::no-newline%禁用自动换行。
参考官方文档
更多模板语法可查阅rsyslog 模板手册。
通过自定义模板,可将日志格式化为适合人工阅读、机器解析或分析工具处理的形式,提升日志可读性和故障排查效率。
- 在rsyslog.conf中配置日志输出格···
2025-06-19
- 如何在rsyslog.conf中配置日志的···
2025-06-19
- 在rsyslog.conf中如何修改日志级···
2025-06-19
- 怎样手动清除DNS缓存?
2025-06-18
- 为什么修改DNS记录后有时无法立即···
2025-06-18
- 如何查看DNS记录的TTL值?
2025-06-18
- 面向未来的高可用境外服务器架构···
2024-08-26
- 跨境电商成功案例之优秀外国服务···
2024-08-22
- 从成本效益角度分析境外服务器的···
2024-08-17
- 如何规避使用外国服务器的风险问···
2024-08-16
- 搭建安全稳定的境外网站:首选外···
2024-08-19
- 针对中小企业的境外服务器配置指···
2024-08-22