2014-07-27 12 views
7

मैं बंदूक + Nginx का उपयोग कर एक फ्लास्क वेब ऐप चला रहा हूं। मैं daemon मोड में बंदूक चलाता हूं। मैंने फ़ाइलों तक पहुंच और त्रुटि लॉग इन करने के लिए गनिकोर्न और nginx को कॉन्फ़िगर किया। लेकिन मैं सिर्फ एक फ़ाइल में फ्लास्क लॉग नहीं मिल सकता है।फ्लास्क के लिए बंदूक काम के लिए लॉगिंग काम नहीं मिल सकता है

मैं एक खोल फ़ाइल का उपयोग gunicorn के साथ अपने एप्लिकेशन शुरू करने के लिए:

और मेरे कुप्पी अनुप्रयोग में मैं प्रति दस्तावेज़ के रूप में प्रवेश करने जोड़ने की आवश्यकता है:

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() 

मैं भी अन्य स्थानों पर app.logger.debug जोड़ा ।

जब मैं gunicorn--daemon के बिना शुरू करता हूं, तो लॉगिंग फ़ाइल ठीक काम करती है। लेकिन एक बार जब मैं --daemon जोड़ता हूं तो कोई लॉग उत्पन्न नहीं होता है।

मैंने print का उपयोग करने की कोशिश की लेकिन यह केवल --daemon के बिना भी काम करता है।

मैंने थोड़ी देर की खोज की है और it seems बंदूकधारी एप्लिकेशन लॉगिंग का समर्थन नहीं करती है। लेकिन मैंने सोचा कि फाइल में लॉगिंग ठीक रहेगी?

क्या कोई जानता है कि मैं अपनी सेटिंग्स के तहत फ़ाइल में कैसे लॉग आउट कर सकता हूं?

+3

जो कोई भी प्रश्न downvoted के लिए मैं सवाल यहाँ की गुणवत्ता बनाए रखने के लिए आपके प्रयास की सराहना, लेकिन कुछ स्पष्टीकरण उपयोगी हो गया होता। – Yulong

+0

जब तक आप सिंगल-सर्वर और स्टेटफुल रहने की योजना नहीं बनाते, तो मैं एक फ़ाइल में लॉगिंग से बचने का सुझाव देता हूं और रिमोट सिसलॉग या किसी और चीज पर सीधे लॉग इन करता हूं जो आपके लॉग को बनाए रखेगा यदि आपके सर्वर को नष्ट और पुनर्निर्मित करने की आवश्यकता है। – rbanffy

उत्तर

0

मैं भी nginx उपयोग कर रहा हूँ + gunicorn + फ्लास्क

कैसे मैं gunicorn अनुप्रयोग चलाने है।

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

एक डेमॉन प्रक्रिया को चलाने के pythonic तरीका Supervisord की तरह कुछ का उपयोग कर रहा है, बैश भूल जाते हैं, अपने अजगर। क्या आपने प्रॉक्सी पास के रूप में nginx का उपयोग करने पर विचार किया है? गनिकोर्न डब्लूएसजीआई को संभाल सकता है। मुझे लगता है कि यह 1.3.13 के बाद से उपलब्ध है। यह websockets के लिए है, लेकिन यदि आप http प्रोटोकॉल चलाते हैं तो भी काम करेंगे।

कुछ की तरह

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; 
    } 
} 
संबंधित मुद्दे