2015-02-05 9 views
5

Używam uwsgi z parametrem --daemonize /logs/uwsgi.logJak utworzyć jeden dziennik uwsgi dziennie?

Plik ten staje się coraz większy i chciałbym go podzielić na mniejsze części. Jeden dziennie byłby lepszy. Zrobiłem to dla nginx, gdzie łatwo było określić nazwę pliku dziennika przy użyciu zmiennych daty. Czy można zrobić to samo dla uwsgi?

Coś jak:

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

Czy jest jakiś inny sposób, aby uzyskać ten sam rezultat, bez zbytniego zaangażowania innych procesów?

Odpowiedz

10

Sam system uWSGI może tylko "dzielić się według rozmiaru" z opcją --log-maxsize.

Podejście oparte na czasie wykorzystuje klasyczne rotogłowce logrotate lub apache (http://httpd.apache.org/docs/2.2/programs/rotatelogs.html), które można łączyć z wtyczką logpipe uWSGI.

Wreszcie można mieć nginx podobnego zachowania wyzwalającego przeładowanie na północy instancji uWSGI (można nawet użyć wbudowanego obiektu cron):

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

W tym wierszu demona uzyskuję plik dziennika o nazwie "/logs/uwsgi-.log", brakuje części daty. Czy wymaga określonej wersji lub wtyczki? –

+1

2.x wersje działają na pewno, może nie masz polecenia "date" na ścieżce? – roberto

+1

Problem polegał na tym, że używałem zbyt starej wersji programu uwsgi (1.9.x). Aktualizacja rozwiązała problem, a teraz twoje rozwiązanie wydaje się działać. (Przynajmniej utworzył plik z dzisiejszą datą). Dzięki! –

1

podstawie odpowiedzi Roberto tu jest konfiguracja, która będzie obracać logi. Będzie przechowywać do 14 plików dziennika. Codzienna rotacja o 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 --; } & 

Uśpienie jest potrzebne, ponieważ po ponownym załadowaniu uwsgi ponownie wykona cronjob, ponieważ pasuje do bieżącego czasu. Dlatego potrzebujemy snu przez ponad 60 sekund przed ponownym załadowaniem. Odświeża również plik konfiguracyjny przy każdym obrocie, takie zachowanie może nie być pożądane.

Dlaczego ktoś potrzebuje takiego hacka? Cóż, w moim przypadku nie mam dostępu do prawidłowej konfiguracji logowania w systemie, ale mam pozwolenie na zmianę konfiguracji uwsgi.