logger 命令详解
更新时间:2026-09-17。「一个命令一个文档」系列,属于日志、时间与计划任务族。脚本里某一步想留痕到系统日志(能用 journalctl 统一检索、能被 rsyslog 转发收集),用 logger 而不是自己 echo 到散落文件。
logger 是 util-linux 的 syslog 命令行客户端,把消息交给本机 syslog 守护进程(rsyslog/journald)。
一、常用法
bash
logger "backup finished" # 最简:发一条默认 user.notice 消息
logger -t backup "job done at $(date)" # -t 打标签(journalctl -t backup 过滤)
logger -p local0.warning "disk almost full" # 指定 facility.level
logger -p err -s "fatal, abort" # -s 同时打到 stderr
logger -f /var/log/app.log # 把文件内容逐行送入 syslog
tail -f run.log | logger -t myjob # 管道:标准输入实时转发
logger -n logserver.example.com -P 514 "msg" # 发往远程日志主机(UDP)
logger --id -t cron "started" # 附带调用进程 PID二、优先级 facility.level
bash
facility:auth/authpriv/cron/daemon/mail/user/local0~7
level(严重度,从高到低):emerg alert crit err warning notice info debug-p local0.warning这种写法让消息按设施被 rsyslog 规则分流到不同文件/远端。- 不指定时默认
user.notice。脚本排障用info,真正需要告警的用warning/err,别什么都打成 err 污染告警。
三、查看是否写进去了
bash
journalctl -t backup --since "10 min ago" # systemd 系统
grep backup /var/log/syslog /var/log/messages # 传统 rsyslog 文件(发行版不同)四、和 echo >>file / 与排障的关系
echo >> /tmp/run.log:写私有文件,不进统一日志,轮转/收集都要自己管,跨主机难聚合。logger:交给系统日志设施,白来 journalctl 过滤、按时间查询、日志轮转、集中转发(rsyslog/syslog-ng 推到日志服务器),cron/后台脚本想进监控体系首选它。- 守护进程自身的结构化日志仍建议直接打 stdout(交给 systemd/journald 或容器采集),logger 更适合在没有日志框架的 shell 脚本里补关键事件点。
容器里 logger 默认连不上宿主 syslog(无日志套接字/守护进程),需挂载
/dev/log或用宿主机/采集 agent;这是"本地能写、容器里没消息"的常见原因。
相关命令
看系统日志用 journalctl/查看日志 FAQ,定时脚本配合 crontab,网络发远端可用 nc,日志轮转见 logrotate(日志族)。
总结
logger 是从命令行/脚本把消息送进 syslog/journald 的客户端:-t 打标签、-p local0.warning 指定设施与级别、-s 兼顾 stderr、-f/管道批量送、-n 发远端;好处是自动获得 journalctl 检索、轮转与集中转发,适合无日志框架的 shell 脚本关键事件留痕,区别于自己 echo 到散落文件;容器内要挂 /dev/log 才能投递。