13 nginx log-files logging logrotate
我想实现 nginx 日志的轮换:
最好的方法是像 PostgreSQL 那样的东西——即在它的 log_filename 配置变量中,我可以指定 strftime-style %Y-%m-%d,它会在日期(或时间)更改时自动更改日志。
来自 apache 的另一种方法 - 通过管道将日志发送到 rotatelogs 程序。
据我所能搜索 - 不存在这样的方法。我所能做的就是将 logrotate 与 dateext 选项一起使用,但它有自己的一组缺点,我宁愿使用类似 |rotatelogs 或 log_filename 在 PostgreSQL 中的东西。
小智 8
虽然世界对不起眼的命名管道是朋友还是敌人存在分歧,但它可能是解决您问题的最简单方法。它确实有一些缺点(因为您需要提前创建管道),但它消除了对 cron 的需要,并允许您使用您选择的日志管道过滤器。
这是使用 cronolog on 的示例access.log
:
/var/log/nginx
,所以我也会把我的管道放在那里。名字由你决定;我追加.fifo
,它是access.log
,所以我的将在/var/log/nginx/access.log.fifo
。为日志文件创建一个命名管道:
mkfifo /var/log/nginx/access.log.fifo
Run Code Online (Sandbox Code Playgroud)配置nginx.conf
将日志指向您刚刚制作的管道:
access_log /var/log/nginx/access.log.fifo;
Run Code Online (Sandbox Code Playgroud)在我们启动服务器之前,修改您的 init.d 脚本以启动监听管道的日志循环器:
LOGS="/var/log/nginx"
pkill -f "/usr/sbin/cronolog --symlink $LOGS/access.log"
( cat $LOGS/access.log.fifo | /usr/sbin/cronolog --symlink $LOGS/access.log "$LOGS/%Y/%m/%d/access.log" ) &
Run Code Online (Sandbox Code Playgroud)
rotatelogs
如果您愿意,可以使用类似的命令行cronolog
- 请参阅他们的文档以了解语法。
如果你的发行版有一个start-stop-daemon
,你应该改用它,因为它理论上有关于你的平台的任何特殊知识,并pkill
为你照顾。只需在脚本包住命令,并把它作为--exec
对start-stop-daemon
你的init.d/nginx
。
恐怕我不太明白你的问题:由于 nginx 不支持任何内置的 logrotation,你将不得不使用类似的东西
mv access.log access.log.$(date "+%Y-%m%d")
kill -USR1 $(cat master.nginx.pid)
Run Code Online (Sandbox Code Playgroud)
/etc/cron.daily 中的某个位置(当然,您需要使用完整路径名来限定上面的文件名)或安装 apache2 实用程序以访问旋转日志。
归档时间: |
|
查看次数: |
13253 次 |
最近记录: |