Szt*_*upY 7 linux logging cronolog logrotate
我有一个长时间运行的进程,它将其日志文件写入stdout. 我想将此输出保存到不同的文件,自动维护这些文件(如删除/归档旧文件),而无需重新启动主进程。
解决方案是将输出发送到文件 ( process > log.txt) 并logrotate在其上使用,但logrotate需要重新启动程序,这是不可能的。
另一种是将输出通过管道传输到cronolog( process | cronolog),但在这种情况下,旧文件不会被删除/存档,这意味着我必须制作一个程序来为我进行维护。
最好的办法是能够同时使用这两个实用程序,因为cronolog我不需要重新启动进程,并且logrotate会完全按照我的需要维护旧的日志文件。有没有办法让这两个程序协同工作?如果没有,这个问题有什么好的解决方案?
来自 DJB 的daemontools 的Multilog可以(几乎)完全符合您的要求。我知道的唯一缺点是没有多少发行版带有daemontools包。
如果您没有使用svc(daemontools 的一部分)管理您的应用程序,您将必须找到一种方法将输出通过管道传输到类似的命令
multilog t s1048576 n100 ./my_log_directory
Run Code Online (Sandbox Code Playgroud)
这转化为:
t: 插入一个 tai64n 时间戳(可以用 转换为可读时间tai64nlocal)s1048576: 当日志文件增长到 1MiB 时旋转它n100: 保留不超过 100 个旋转文件./my_log_directory: 以.or开头的任何内容/- 将日志写入该目录写入的日志将具有 filename current,当 multilog 轮换日志时,它将被重命名为@<tai64n timestamp>.s文件名显示文件轮换时间的位置。扩展名可以是.s文件是否已安全刷新,或者.u是否已被截断。
有关更多信息,请查看链接。
| 归档时间: |
|
| 查看次数: |
4710 次 |
| 最近记录: |