2012-11-20 23 views
22

मैं ngninx के पीछे बंदूक चला रहा हूं। मैं gunicorn में gunicorn-error.log में गलतियों को लॉग करना चाहता हूं और gunicorn-access.log पर लॉग का उपयोग करना चाहता हूं।बंदूक के लिए काम पर पहुंच लॉग नहीं मिल सकता

मुझे त्रुटि लॉगिंग मिल गई है लेकिन एक्सेस लॉग नहीं है, मैं गलत क्या कर रहा हूं?

#!/bin/bash 
set -e 
ENV=/home/my/env/bin/activate 
GUNICORN=gunicorn_django 
SETTINGS_PATH=/home/my/app/app/settings 
PROJECT_PATH=/home/my/app 
CONFROOT=/home/my/app/conf/gunicorn.conf.py 

cd $SETTINGS_PATH 
source $ENV 
export PYTHONPATH=$PROJECT_PATH 
exec $GUNICORN app.settings.staging -c $CONFROOT 

यह दोनों gunicorn-error.log और gunicorn-access.log लेकिन बनाता है:

bind = '127.0.0.1:8888' 
backlog = 2048 
workers = 3 
errorlog = '/home/my/logs/gunicorn-error.log' 
accesslog = '/home/my/logs/gunicorn-access.log' 
loglevel = 'debug' 
proc_name = 'gunicorn-my' 
pidfile = '/var/run/my.pid' 

यह gunicorn चलाने के लिए स्क्रिप्ट है:

यह मेरा gunicorn.conf.py है केवल gunicorn-error.log को कोई लॉग मिलता है, उदाहरण के लिए:

2012-11-20 11:49:57 [27817] [INFO] Starting gunicorn 0.14.6 
2012-11-20 11:49:57 [27817] [DEBUG] Arbiter booted 
2012-11-20 11:49:57 [27817] [INFO] Listening at: http://127.0.0.1:8888 (27817) 
2012-11-20 11:49:57 [27817] [INFO] Using worker: sync 
2012-11-20 11:49:58 [27825] [INFO] Booting worker with pid: 27825 
2012-11-20 11:49:58 [27828] [INFO] Booting worker with pid: 27828 
2012-11-20 11:49:58 [27830] [INFO] Booting worker with pid: 27830 

मैं क्या गलत कर रहा हूं? कोई भी त्रुटि लॉग और एक्सेस लॉग के साथ अपने काम कर रहे gunicorn.conf.py साझा करना चाहते हैं?

उत्तर

18

मैं निम्नलिखित करने के लिए Django में मेरे प्रवेश विन्यास को बदल दिया है और यह मदद की:

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': True, 
    'root': { 
     'level': 'WARNING', 
     'handlers': ['sentry'], 
    }, 
    'formatters': { 
     'verbose': { 
      'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s' 
     }, 
     'generic': { 
      'format': '%(asctime)s [%(process)d] [%(levelname)s] %(message)s', 
      'datefmt': '%Y-%m-%d %H:%M:%S', 
      '()': 'logging.Formatter', 
     }, 
    }, 
    'handlers': { 
     'sentry': { 
      'level': 'ERROR', 
      'class': 'raven.contrib.django.handlers.SentryHandler', 
     }, 
     'console': { 
      'level': 'DEBUG', 
      'class': 'logging.StreamHandler', 
      'formatter': 'verbose' 
     }, 
     'error_file': { 
      'class': 'logging.FileHandler', 
      'formatter': 'generic', 
      'filename': '/home/fungine/gunicorn.error.log', 
     }, 
     'access_file': { 
      'class': 'logging.FileHandler', 
      'formatter': 'generic', 
      'filename': '/home/fungine/gunicorn.access.log', 
     }, 
    }, 
    'loggers': { 
     'django.db.backends': { 
      'level': 'ERROR', 
      'handlers': ['console'], 
      'propagate': False, 
     }, 
     'raven': { 
      'level': 'DEBUG', 
      'handlers': ['console'], 
      'propagate': False, 
     }, 
     'sentry.errors': { 
      'level': 'DEBUG', 
      'handlers': ['console'], 
      'propagate': False, 
     }, 
     'gunicorn.error': { 
      'level': 'INFO', 
      'handlers': ['error_file'], 
      'propagate': True, 
     }, 
     'gunicorn.access': { 
      'level': 'INFO', 
      'handlers': ['access_file'], 
      'propagate': False, 
     }, 
    }, 
} 
+0

धन्यवाद! शायद वहां लॉग भी होना बेहतर होगा। – Mikael

+1

इसके साथ समस्या यह है कि फ़ाइल प्रक्रियाओं को एकाधिक प्रक्रियाओं के माध्यम से लॉग इन करने के लिए नहीं है। – dalore

+1

किसी भी अन्य को फ़ॉर्मटर के लिए एक विशिष्ट श्रेणी निर्दिष्ट करने के लिए बस किसी और पर फंस जाता है, तो कुंजी '"()" 'नहीं" वर्ग है, कक्षा कुंजी हैंडलर के लिए है। दस्तावेज़ों में [यहां] (https://docs.python.org/2/library/logging.config.html#logging-config-dictschema) का उल्लेख किया गया है। – danny

16

मेरे लिए 'disable_existing_loggers': Falselogging.config.dictConfig में काम करता है निर्दिष्ट।

disable_existing_loggers - अगर False के रूप में निर्दिष्ट, लॉगर्स जो जब इस कॉल किया जाता है मौजूद अकेला छोड़ दिया जाता। डिफ़ॉल्ट True है क्योंकि यह पुराने व्यवहार को पिछड़े-संगत तरीके से सक्षम बनाता है। यह व्यवहार किसी भी मौजूदा लॉगर्स को अक्षम करना है जब तक कि वे या उनके पूर्वजों को लॉगिंग कॉन्फ़िगरेशन में स्पष्ट रूप से नामित किया गया हो।

http://docs.python.org/2/library/logging.config.html#logging.config.fileConfig

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^