gpt4 book ai didi

ruby-on-rails - 如何轮换我的 Rails 5 日志?

转载 作者:IT王子 更新时间:2023-10-29 01:11:05 24 4
gpt4 key购买 nike

我在 Ubuntu 14.04 上运行 Rails 5。有没有办法在不依赖 Linux logrotate 系统的情况下轮换我的日志?我有这个设置...

myuser@myapp:~$ cat /etc/logrotate.d/myapp
/home/rails/myapp/log/*.log {
daily
missingok
rotate 2
compress
delaycompress
notifempty
copytruncate
}

但是我的日志从不轮换。看看他们有多臃肿......

myuser@myapp:~$ ls -al /home/rails/myapp/log/
total 3958356
drwxr-xr-x 2 rails rails 4096 Jul 3 22:31 .
drwxr-xr-x 15 rails rails 4096 Sep 21 17:21 ..
-rw-rw-r-- 1 rails rails 0 Jun 22 10:22 development.log
-rw-rw-r-- 1 rails rails 14960 Jun 1 22:39 development.log.1
-rw-rw-r-- 1 rails rails 0 Oct 22 2016 .keep
-rw-r--r-- 1 rails rails 198362787 Oct 31 16:28 production.log
-rw-r--r-- 1 rails rails 8615654 Jul 3 22:31 production.log.1
-rw-r--r-- 1 rails rails 640621243 Jun 29 13:16 production.log.2.gz
-rw-rw-r-- 1 rails rails 2856792698 Oct 31 17:12 sidekiq.log
-rw-rw-r-- 1 rails rails 348853619 Jul 3 22:31 sidekiq.log.1
-rw-rw-r-- 1 rails rails 0 Jul 3 22:31 test.log
-rw-rw-r-- 1 rails rails 54246 Jul 3 22:31 test.log.1

有没有其他方法可以轮换日志,或者有没有办法修复我包含的配置?

编辑:这是设置的 cron 脚本

myuser@myapp:~$ cat /etc/cron.daily/logrotate
#!/bin/sh

# Clean non existent log file entries from status file
cd /var/lib/logrotate
test -e status || touch status
head -1 status > status.clean
sed 's/"//g' status | while read logfile date
do
[ -e "$logfile" ] && echo "\"$logfile\" $date"
done >> status.clean
mv status.clean status

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

编辑: 根据评论,我尝试将其添加到我的 config/environment/production.rb 文件中......

config.logger = ActiveSupport::Logger.new(config.paths['log'].first, 1, 50 * 1024 * 1024)

但是日志在没有旋转的情况下变得越来越大。

最佳答案

通过遵循 12 因素方法 (Treat logs as event streams),您可以“应该”将此任务委派给主管。

例如,通过使用 immortal它将为您完成所有轮换过程,而不取决于操作系统。

基本配置文件 ( run.yml) 可能如下所示:

cmd: bundle exec unicorn -c unicorn.rb
cwd: /arena/app-1
env:
DEBUG: 1
ENVIRONMENT: production
log:
file: /var/log/app-1.log
age: 86400 # seconds
num: 7 # int
size: 1 # MegaBytes
timestamp: true # will add timesamp to log

如果您想拆分日志 stderr & stdout这可以用来:

cmd: bundle exec unicorn -c unicorn.rb
cwd: /arena/app-1
env:
DEBUG: 1
ENVIRONMENT: production
log:
file: /var/log/app.log
age: 86400 # seconds
num: 7 # int
size: 1 # MegaBytes
stderr:
file: /var/log/app-error.log
age: 86400 # seconds
num: 7 # int
size: 1 # MegaBytes
timestamp: true # will add timesamp to log

作为旁注,来自 12-factor site :

Twelve-factor app processes should never daemonize or write PID files. Instead, rely on the operating system’s process manager to manage output streams, respond to crashed processes, and handle user-initiated restarts and shutdowns.

[免责声明:我是 immortal] 的作者,背后的想法之一确实是覆盖应用程序的大规模自动化,而不需要担心在日志没有正确轮换时填满磁盘,除了可以通过修改以最简单的方式部署(启动/重启)不需要 root 权限的 run.yml 文件。

关于ruby-on-rails - 如何轮换我的 Rails 5 日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47044653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com