2015-02-05 68 views
5

매개 변수 --daemonize /logs/uwsgi.log와 함께 uwsgi를 사용합니다.하루에 하나의 uwsgi 로그 파일을 만드는 방법은 무엇입니까?

이 파일은 커지기 때문에 더 작은 조각으로 나누고 싶습니다. 하루에 1 개가 바람직합니다. 나는 날짜 변수를 사용하여 로그 파일 이름을 지정하는 것이 쉬운 nginx에 대해 그렇게했다. uwsgi에서도 동일한 작업을 수행 할 수 있습니까? 같은

뭔가 :

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

또는 같은 결과를 얻을 수있는 또 다른 방법이 다른 프로세스의 너무 많은 개입없이?

답변

10

자체적으로 uWSGI는 --log-maxsize 옵션을 사용하여 "크기별로 분할"할 수 있습니다.

시간 기반 접근 방식은 uWSGI logpipe 플러그인과 결합 할 수있는 고전적인 logrotate 또는 apache rotatelogs (http://httpd.apache.org/docs/2.2/programs/rotatelogs.html)를 사용합니다.

마지막으로 당신이 uWSGI 인스턴스의 자정에 다시로드 (당신도 포함 cron 기능을 사용할 수 있습니다)을 유발 행동과 같은의 nginx를 가질 수 있습니다

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

그 daemonize-row를 사용하면 "/logs/uwsgi-.log"라는 로그 파일이 생기고 날짜 부분이 누락됩니다. 특정 버전이나 플러그인이 필요합니까? –

+1

2.x 버전은 확실하게 작동합니다. 경로에 'date'명령이 없습니까? – roberto

+1

너무 오래된 버전의 uwsgi (1.9.x)를 사용하고 있었는지 문제가있었습니다. 업그레이드가 문제를 해결하고 이제는 솔루션이 작동하는 것처럼 보입니다. (적어도 오늘 날짜가있는 파일을 만들었습니다). 감사! –

1

여기 로베르토의 답변에 따라 회전 할 구성입니다 로그. 최대 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 config를 변경할 수있는 권한이 있습니다.