/var/log/syslog 是 rsyslogd 根据配置规则写入的文本日志,主要来源是 journald 通过 /run/systemd/journal/syslog 转发(forwardtosyslog=yes)或应用直连 /dev/log;而 journal 是原始结构化日志流,包含微秒级时间戳、_cmdline、_uid、_systemd_unit 等二十多个元数据字段,/var/log/syslog 仅保留简化文本。

/var/log/syslog 和 journal(即 systemd-journald 的二进制日志)不是两个独立的日志源,而是同一套日志流水线中不同环节的输出产物——前者是结构化日志经 rsyslog 分类落地后的文本快照,后者是原始、完整、带元数据的实时日志流本体。它们之间存在明确的映射关系,但不是简单的一对一复制。
/var/log/syslog 是谁写的?从哪来?
/var/log/syslog 通常不由 journald 直接生成,而是由 rsyslogd 进程根据配置规则写入的。
它的上游来源有两个常见路径:
路径一(主流):journald → rsyslog
journald 启用ForwardToSyslog=yes(默认开启),将日志通过 Unix socket/run/systemd/journal/syslog转发给 rsyslog;
rsyslog 通过imuxsock模块监听该 socket,接收结构化日志消息;
然后按/etc/rsyslog.conf或/etc/rsyslog.d/*.conf中的规则(如*.* /var/log/syslog)过滤、格式化并写入文件。路径二(传统回退):应用直连 syslog socket
某些老程序仍调用syslog(3),直接写入/dev/log(由 rsyslog 的imuxsock监听),绕过 journald;
这部分日志也会进入/var/log/syslog,但不进入 journal(除非系统配置了ForwardFromSyslog=yes,极少启用)。
所以 /var/log/syslog 是一个“聚合视图”,可能混入了 journald 转发的日志 + 部分绕过 journald 的旧程序日志。
journal 里有哪些内容,/var/log/syslog 里不一定有?
journal 记录更全、更原始,包含大量 /var/log/syslog 不会保留的信息:
- 精确到微秒的时间戳(
_SOURCE_REALTIME_TIMESTAMP) - 完整命令行(
_CMDLINE)、可执行路径(_EXE)、用户 ID(_UID)、控制组(_SYSTEMD_CGROUP) - 内核早期启动日志(
--boot=0可查)、initrd 阶段日志 - 服务 stdout/stderr 的原始输出(哪怕没打 syslog 标签)
- 失败的 unit 启动过程(如
systemctl start xxx报错前的环境变量、WorkingDirectory 等)
而 /var/log/syslog 经过 rsyslog 处理后,这些字段大多被丢弃或简化为一行纯文本,例如:
Jul 8 13:22:45 ubuntu sshd[12345]: Failed password for root from 192.168.1.100 port 54322 ssh2
这行在 journal 中对应一条记录,除了上述文本,还附带 _PID=12345、_UID=0、_COMM=sshd、_SYSTEMD_UNIT=sshd.service、PRIORITY=3 等二十多个字段。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
如何验证映射关系?几个实用技巧
-
查看某条
/var/log/syslog记录在 journal 中是否存在:# 先提取时间戳和关键词(如 "sshd" 和 "Failed password") grep "Failed password" /var/log/syslog | tail -1 # 然后用 journalctl 按时间+服务+优先级精确定位 journalctl --since "2026-07-08 13:22:40" -u sshd -p err | grep "Failed password"
-
查看 rsyslog 是否正在从 journald 接收日志:
systemctl status rsyslog | grep "imuxsock\|syslog" # 正常应看到类似:imuxsock: connected to /run/systemd/journal/syslog
-
查看 journald 是否启用了转发:
systemctl cat systemd-journald | grep ForwardToSyslog # 输出 "ForwardToSyslog=yes" 表示开启
为什么有时 journal 有日志,/var/log/syslog 却没有?
常见原因包括:
- rsyslog 服务未运行或崩溃:
systemctl is-active rsyslog返回inactive - rsyslog 配置中漏掉了对应 facility 或 priority 的规则(如没配
auth.*,则/var/log/auth.log为空) - 日志级别被过滤:journald 发送
PRIORITY=6(info),但 rsyslog 规则写的是*.err /var/log/syslog,就会丢弃 - rsyslog 的
$ActionFileDefaultTemplate模板未启用%$!扩展字段,导致结构化信息被截断
不复杂但容易忽略










