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:固定为1SD:结构化数据(如[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 rsyslogdate-rfc3339(RFC5424)确保带时区的时间戳。logrotate管理日志文件大小。根据实际需求选择合适的格式,结构化日志(RFC5424/JSON)推荐用于现代分布式系统。