我正在使用 systemd 和单元文件运行一个节点应用程序。可以使用查看应用程序日志,journalctl -u example.com
但日志在某个时候会被切断,从而删除历史记录(我需要它来进行调试)。
如何使用 systemd 配置日志轮换,以便将我的应用程序日志存储在等中example.com.log.1
,example.com.log.2
以便我可以查询我的应用程序的历史记录?
这是我的单位文件:
ExecStart=/usr/bin/node keystone.js
#Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=example.com
User=user
Group=user
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
答案1
增加存储
SystemMaxUse
如果要存储到磁盘,可以通过更改和/或来增加使用的空间量SystemKeepFree
。拥有更多空间将允许存储更多条目。
默认情况下,最大使用限制(SystemMaxUse
)为文件系统的 10%,最小可用空间(SystemKeepFree
)值为 15% - 尽管它们都限制为 4G。
轴颈旋转
当日志达到该值时,日志应自动轮换SystemMaxFileSize
,日志数量由 控制SystemMaxFiles
。如果您喜欢基于时间的轮换,您可以设置MaxFileSec
来设置单个日志中存储条目的最大时间。
存储位置/类型说明
使用 journald,您可以选择将日志条目存储在内存 ( Storage=volatile
) 或磁盘 ( Storage=persistent
) 中。以上假设您将日志存储在磁盘上 - 如果不是这种情况,则需要将上述变量中的“System”替换为“Runtime”。
更多详细信息请参阅man journald.conf
。
替代方案——传递日记帐分录
如果您已经熟悉传统的 SYSLOG 守护进程,您可以通过设置选项ForwardToSyslog
(立即转发消息)来传递日志事件,或者让 syslog 守护进程像日志客户端一样运行并自行获取日志。