Gunicorn: سجل الرسائل من app.logger الخاص بـ Flask

تم إنشاؤها على ١٩ يوليو ٢٠١٢  ·  11تعليقات  ·  مصدر: benoitc/gunicorn

لا يتم حفظ الرسائل من مسجل Flask مثل app.logger.info ("هذه رسالة") في ملفات سجل gunicorn.

التعليق الأكثر فائدة

لا يقوم Flask بتسجيل الرسائل في وضع الإنتاج افتراضيًا لأنه لا يقوم بأي افتراضات حول بيئتك (http://flask.pocoo.org/docs/errorhandling/). لجعل Flask's app.logger يسجل الرسائل عبر gunicorn ، يجب عليك إضافة معالج تسجيل. على سبيل المثال ، هذا هو المسجل إلى stderr gunicorn:

import logging
import flask

app = flask.Flask(__name__)

@app.before_first_request
def setup_logging():
    if not app.debug:
        # In production mode, add log handler to sys.stderr.
        app.logger.addHandler(logging.StreamHandler())
        app.logger.setLevel(logging.INFO)

هذه ليست مشكلة مع gunicorn ويمكن إغلاقها.

ال 11 كومينتر

لا يقوم Flask بتسجيل الرسائل في وضع الإنتاج افتراضيًا لأنه لا يقوم بأي افتراضات حول بيئتك (http://flask.pocoo.org/docs/errorhandling/). لجعل Flask's app.logger يسجل الرسائل عبر gunicorn ، يجب عليك إضافة معالج تسجيل. على سبيل المثال ، هذا هو المسجل إلى stderr gunicorn:

import logging
import flask

app = flask.Flask(__name__)

@app.before_first_request
def setup_logging():
    if not app.debug:
        # In production mode, add log handler to sys.stderr.
        app.logger.addHandler(logging.StreamHandler())
        app.logger.setLevel(logging.INFO)

هذه ليست مشكلة مع gunicorn ويمكن إغلاقها.

مغلق لكل طلب. شكرا!

هل يلتقط برنامج Gunicorn السجل تلقائيًا من STDERR؟

تضمين التغريدة
كيف أجبر gunicorn على اختيار السجل من STDERR؟

قد يكون العلم -R هو ما تبحث عنه.

http://gunicorn-docs.readthedocs.org/en/latest/settings.html#enable -stdio-inheritance

-R لم يفعل ذلك من أجلي.

أدناه هو الإعداد الخاص بي

@app.route('/')
def index():
    console = logging.StreamHandler()
    log = logging.getLogger("asdasd")
    log.addHandler(console)
    log.setLevel(logging.DEBUG)
    log.error("Something")
    print >> sys.stderr, "Another thing"
    return 'ok'

هنا كيف يمكنني تشغيله

gunicorn --access-logfile - --log-file /mnt/log/test.log --bind 0.0.0.0:8080 --workers 2 --worker-class gevent --log-level -D debug server:app

أحصل على سجلات gunicorn في /mnt/log/test.log لكن لم أحصل على أي من سجلات التطبيق الخاصة بي.

تمام. قد أسيء فهم كيفية عمل ذلك ، ما لم يكن الأمر بسيطًا
الاضطرار إلى شطف stderr يدويًا (IIRC هذا لأنه يصبح مؤقتًا
عندما شوك غونيكورن ، ربما؟)

لكن من المؤكد أنه من الأسهل بكثير التحكم في المكان الذي تذهب إليه رسائل السجل الخاصة بك إذا
كنت تستخدم الحطابين بيثون بدلا من stdio.
في 26 حزيران (يونيو) 2014 الساعة 1:39 ظهرًا ، كتب "يوسف فوزان" [email protected] :

-R لم يفعل ذلك من أجلي.

أدناه هو الإعداد الخاص بي

@ app.route ('/')
فهرس def ():
وحدة التحكم = logging.StreamHandler ()
log = logging.getLogger ("asdasd")
log.addHandler (وحدة التحكم)
log.setLevel (logging.DEBUG)
خطأ في السجل ("شيء ما")
print >> sys.stderr ، "شيء آخر"
العودة "حسنا"

هنا كيف يمكنني تشغيله

gunicorn --access-logfile - --log-file /mnt/log/test.log --bind 0.0.0.0:8080 - العمال 2 - worker-class gevent --log-level debug server: app

أحصل على سجلات gunicorn في /mnt/log/test.log لكن لا شيء من طلبي
السجلات.

-
قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub
https://github.com/benoitc/gunicorn/issues/379#issuecomment -47276949.

أعتقد أنني وجدت المشكلة. هنا إدخال في سجل التغيير لـ 19.00

fix logging: don’t try to redirect stdout/stderr to the logfile.

لقد جربت للتو الإصدار 18 ويتم توجيه السجلات من StreamHandler إلى سجلات gunicorn. أي فكرة كيف أصلح هذا المشكل؟
تضمين التغريدة

spicavigo gunicorn لن يقوم بإعادة توجيه stderr إلى ملف السجل تلقائيًا. كان الإصلاح هو إزالة الاختراق كما تمت مناقشته في # 591. هل جربت --error-logfile=- الذي يعرض السجلات على وحدة التحكم؟

إذا كنت تريد إرجاع الخطأ إلى ملف الخطأ مباشرةً ، يمكنك في النهاية الطباعة إلى البيئة ['wsgi.errors'] أو تسجيله: ee08ac86441e36c3433849b79b3839d1425647fd.

شكرا benoitc

أقوم الآن بتسجيل الدخول إلى ملف بدلاً من stderr. إنه مجرد أن التغيير حدث بين مطوري ولذا فقد تعثرت تمامًا. كنت أقوم بتثبيت نقطة تثبيت gunicorn وفجأة توقفت إعادة توجيه stderr عن العمل ولم أدرك أن ذلك كان بسبب تغيير الإصدار وليس بسبب الأخطاء في الكود الخاص بي :)

benoitc هل لا يزال من الممكن تسجيل stderr إلى ملف السجل بطريقة ما؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات