RELATEED CONSULTING
相关咨询
欢迎选择下列在线客服咨询
微信客服
微信客服二维码
热线电话:13863516421
7x24小时,全年无休
我们服务器的承诺:
关闭右侧工具栏

境外国外服务器专题

如何在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 模板手册。


通过自定义模板,可将日志格式化为适合人工阅读、机器解析或分析工具处理的形式,提升日志可读性和故障排查效率。


我们提供7X24小时售后服务,了解更多机房产品和服务,敬请联系
购买咨询 售后服务