Linux syslog(如rsyslog
、syslog-ng
等)支持多种日志输出格式,以下是主要格式及配置方法:
示例:
<PRI>Timestamp Hostname Tag: Message
PRI
:优先级(Facility + Severity计算得出)Timestamp
:本地时间(可能不带时区)Tag
:进程名(如sshd
)配置示例(rsyslog):
$template TraditionalFormat,"<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag%%msg%\n"
示例:
<PRI>VERSION TIMESTAMP HOSTNAME APP-NAME PROCID MSGID [SD] MSG
VERSION
:固定为1
SD
:结构化数据(如[exampleSDID@32473 key="value"]
)配置示例(rsyslog):
$template RFC5424Format,"<%PRI%>1 %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %msg%\n"
示例:
{
"timestamp": "2023-10-01T12:00:00Z",
"host": "server1",
"severity": "error",
"message": "Connection refused"
}
配置方法:
mmjsonparse
模块):module(load="mmjsonparse")
$template JSONFormat,"%msg:1:2:$!json%\\n"
destination d_json {
file("/var/log/json.log" template("$(format-json --key ISODATE)\n"));
}
示例:
"2023-10-01T12:00:00Z","server1","error","Connection refused"
配置示例(rsyslog):
$template CSVFormat,"%TIMESTAMP:::date-rfc3339%,%HOSTNAME%,%syslogseverity-text%,%msg%\n"
bash
$template MyFormat,"%TIMESTAMP% %HOSTNAME% %programname% %msg% [Priority:%PRI%]\n"
bash
module(load="ommysql")
action(type="ommysql" server="localhost" db="logs" uid="user" pwd="pass" template="MyFormat")
/etc/rsyslog.conf
或/etc/syslog-ng/syslog-ng.conf
)。bash
systemctl restart rsyslog
date-rfc3339
(RFC5424)确保带时区的时间戳。logrotate
管理日志文件大小。根据实际需求选择合适的格式,结构化日志(RFC5424/JSON)推荐用于现代分布式系统。