2015-02-05 2 views
5

Я использую uwsgi с параметром --daemonize /logs/uwsgi.logКак создать один файл журнала uwsgi в день?

Этот файл, однако, становится большим, и я хотел бы разбить его на более мелкие куски. Предпочтительным было бы одно в день. Я сделал это для nginx, где было легко указать имя файла журнала с использованием переменных даты. Можно ли сделать то же самое для uwsgi?

Что-то вроде:

[uwsgi] 
daemonize=/logs/uwsgi-$year-$month-$day.log 

Или есть другой способ, чтобы получить тот же результат, не слишком много участия других процессов?

ответ

10

uWSGI сам по себе может «разделить по размеру» с опцией -log-maxsize.

Временные подходы используют классический логарифт или apache rotatelogs (http://httpd.apache.org/docs/2.2/programs/rotatelogs.html), которые вы можете комбинировать с плагином wwsGI logpipe.

Наконец, вы можете иметь Nginx как поведение, запускающего перезарядку в полночь экземпляра uWSGI (вы даже можете использовать встроенный хрон центр):

[uwsgi] 
daemonize = /logs/[email protected](exec://date +%%Y-%%m-%%d).log 
log-reopen = true 
+0

С помощью этой строки daemonize я получаю файл журнала с именем «/logs/uwsgi-.log», не содержащий даты. Требуется ли для этого конкретная версия или плагин? –

+1

версии 2.x наверняка работают, может быть, у вас нет команды «date» в пути? – roberto

+1

Проблема была в использовании слишком старой версии uwsgi (1.9.x). Модернизация устраняет проблему, и теперь ваше решение, похоже, работает. (По крайней мере, он создал файл с сегодняшней датой). Благодаря! –

1

На основании ответа ROBERTO здесь конфигурация, которая будет вращаться журналы. Он будет содержать до 14 файлов журнала. Ежедневное вращение в 3:15.

[uwsgi] 
set-placeholder = log_dir=/var/log 
set-placeholder = log_prefix=myservice- 
set-placeholder = log_num=14 
pidfile = /var/run/uwsgi-myservice.pid 
logto = %(log_dir)/%(log_prefix)@(exec://date +%%Y-%%m-%%d).log 
log-reopen = true 
unique-cron = 15 3 -1 -1 -1 { sleep 66 && kill -HUP $(cat %(pidfile)) && ls -tp %(log_dir)/%(log_prefix)* | grep -v '/$' | tail -n +%(log_num) | xargs -d '\n' -r rm --; } & 

сон необходим, потому что после перезагрузки uwsgi выполнит cronjob снова, потому что это соответствует текущему времени. Поэтому нам нужно спать более 60 секунд до перезагрузки. Он также перезагружает файл конфигурации на каждом повороте, такое поведение может быть нежелательным.

Зачем нужен такой хак? Ну, в моем случае у меня нет доступа к правильной настройке ведения журнала в системе, но у меня есть разрешение на изменение конфигурации uwsgi.

Смежные вопросы