2014-07-27 7 views
7

Ben bir Flask web uygulamasını gunicorn + Nginx kullanarak çalıştırıyorum. Ben daemon modunda gunicorn çalıştırın. Erişim ve hatayı dosyalara kaydetmek için gunicorn ve nginx'i yapılandırdım. Ama sadece Flask'ı bir dosyaya kaydedemiyorum.Flask için gunycorn daemon modu ile günlüğe kaydedilemiyor.

Ben gunicorn ile benim Uygulamayı başlatmak için bir kabuk dosyası kullanmak: Ben doc göre giriş eklemek

Ve şişesi app gerektirir:

app.debug = False 
... 
if __name__ == '__main__': 
    if app.debug != True: 
     import logging 
     from logging.handlers import RotatingFileHandler 
     handler = RotatingFileHandler("flask.log", maxBytes=10000, backupCount=1) 
     handler.setLevel(logging.DEBUG) 
     app.logger.addHandler(handler) 
     app.logger.debug("test!!") 
    app.run() 

Ben de diğer yerlerde app.logger.debug eklendi .

--daemon olmadan gunicorn'u başlattığımda, günlük dosyası düzgün çalışıyor. Ama bir kez --daemon ekledikten sonra hiçbir günlük oluşturulmaz.

print'u kullanmayı denedim, ancak yalnızca --daemon olmadan çalışır.

Bir süredir arama yaptım ve it seems gunicorn uygulama günlüğünü desteklemiyor. Ama bir dosyaya girişin iyi olacağını düşündüm.

Ayarlarım altında bir dosyada nasıl oturum açabileceğimi bilen var mı?

+3

gibi

şey burada soruların kalitesini korumak için çaba için teşekkür ederiz, ancak bazı açıklama yararlı olurdu. – Yulong

+0

Tek sunuculu ve durumsal olarak kalmayı planlamıyorsanız, bir dosyaya giriş yapılmasını önleme ve doğrudan uzak bir syslog'a veya sunucunuzun imha edilmesi ve yeniden oluşturulması gerekiyorsa günlüklerinizi saklayacak başka bir şeyle oturum açmanızı öneriyorum. – rbanffy

cevap

0

Ben de + gunicorn + i gunicorn uygulamanın çalışma yapmak nasıl

şişeye nginx kullanıyorum.

myapp.ini

[server:main] 
use = egg:gunicorn#main 
daemon = True 
host = 0.0.0.0 
python = /usr/bin/python3 
port = 5005 
workers = 2 
proc_name = myapp 
backlog = 1024 
worker_class = gaiohttp 
loglevel = debug 
syslog = True 
syslog_addr = udp://log:514 
syslog_prefix = myapp 
syslog_facility = local3 
forwarded-allow-ips = 10.0.0.4, 10.0.0.8, 10.0.0.100 

[app:main] 
use = call:myapp.main:create_app 

/etc/init.d/myapp

https://gist.githubusercontent.com/vpol/95970c8c4223c12548c8/raw/0b59d659d2818e19f2c6c5112664a7e0acd9b22d/gunicorn%20init%20script 

/etc/default/myapp

# Defaults for myapp initscript 
# sourced by /etc/init.d/myapp 

# make this read NO_START=0 when you're done setting up your config. 
NO_START=0 
DAEMON="/usr/bin/gunicorn" 
DAEMON_OPTS="--paste /etc/myapp/myapp.ini --preload" 
MYAPP_USER="myuser" 
MYAPP_GROUP="myuser" 

myapp/main.py

import logging 

from flask import Flask 
from werkzeug.contrib.fixers import ProxyFix 

def create_app(*args, **kwargs): 
    app = Flask('myapp') 

    # Init logging 
    from logging.handlers import SysLogHandler 

    app.logger_name = 'myapp' 
    app.logger.addHandler(SysLogHandler(address=('log', 514), facility=local5)) 
    app.logger.setLevel(debug) 
    werkzeug_logger = logging.getLogger('werkzeug') 
    werkzeug_logger.setLevel(DEBUG) 
    werkzeug_logger.addHandler(SysLogHandler(address=('log', 514), facility=local2)) 

    app.logger.debug('started myapp') 

    return ProxyFix(app) 
0

servis sürecini çalıştırmak için pythonic yolu Bash unutmak, Supervisord gibi onun piton şey kullanıyor. Nginx'i proxy geçişi olarak kullanmayı düşündünüz mü? Gün batımı WSGI ile baş edebilir. 1.3.13'ten beri mevcut olduğunu düşünüyorum. Websockets içindir, ancak bir http protokolü çalıştırsanız bile çalışacaktır. sorusunu downvoted kim için

server { 
    listen 80; 
    server_name localhost; 
    access_log /var/log/nginx/example.log; 

    location/{ 
     proxy_pass http://127.0.0.1:5000; 
     proxy_redirect off; 

     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 
}