Gunicorn: كيف يمكنني طباعة سجل الوصول إلى STDOUT؟

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

مرحبا،

http://docs.gunicorn.org/en/stable/settings.html#accesslog يخبرني أن '-' سينتج إلى stderr لكننا نفضل STDOUT لأغراض التسجيل. هل هناك طريقة للقيام بذلك؟

شكرا!

Documentation FeaturLogging

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

مع ملف التطبيق myapp.py ، جربت ما يلي.

$ python --version
Python 3.5.2
$ gunicorn --version
gunicorn (version 19.7.0)
$ gunicorn --access-logfile - myapp:app 

أستطيع أن أؤكد أن مخرجات سجل الوصول تذهب إلى stdout .

ال 22 كومينتر

السطر ذو الصلة هنا: https://github.com/benoitc/gunicorn/blame/master/gunicorn/glogging.py#L335 logging.StreamHandler() الافتراضي هو sys.stderr . ربما يمكننا تغيير accesslog لقبول "stdout" و "stderr" كقيم صالحة وتمريرها إلى logging.StreamHandler() .

حل آخر أقل مرونة:

معالج وحدة التحكم يطبع بالفعل إلى sys.stdout : https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L64 يمكننا ضبط المعالج على "console" مقابل gunicorn.accesslog كما فعلنا بالفعل مقابل gunicorn.error في https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L55

أنا مرتبك. ألا يقوم StreamHandler بتسجيل الدخول بالفعل إلى sys.stdout؟

لا ، القيمة الافتراضية هي sys.stderr : https://github.com/python/cpython/blob/master/Lib/logging/__init__.py#L955

حسنًا ، فهمت الآن. في الأصل كنا نطبع السجلات إلى stdout. IMO يجب أن يكون سجل الوصول افتراضيًا STDOUT. أفكار؟

benoitc : +1:

الوصول إلى سجل على stdout
خطأ في تسجيل الدخول stderr

أي تحديثات على هذا الطلب؟

benoitc لست متأكدًا من أن هذا الالتزام يعالج هذه المشكلة. لنفترض أنني أجري ، gunicorn myapp:app بدون وسيطات إضافية. هل توقع أن يقوم Gunicorn بتسجيل سجلات الوصول إلى المخرجات القياسية؟ إذا كان الأمر كذلك ، فإن gunicorn لا يفعل ذلك.

في https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L302 بدون أي وسيطات سطر أوامر self.cfg.accesslog هو None وتعود الدالة مبكرًا. بقدر ما أستطيع أن أقول ، يبدو أنه لا توجد طريقة لتسجيل الدخول إلى stdout دون تحديد --log-config أو --log-syslog . هل هذا صحيح؟

افتراضيا يتم تعطيل سجل الوصول إذا كان هذا ما تقصده؟

benoitc نعم. يبدو أن المناقشة أعلاه تشير إلى أن سجلات الوصول ستنتقل إلى stdout وسجلات الأخطاء إلى stderr. ومع ذلك ، يبدو أن تسجيل الوصول معطل افتراضيًا.

راجع للشغل ، مع Python 2.7 اعتدت أن أكون قادرًا على القيام بـ --access-log /dev/stdout --error-log /dev/stderr وهذا سيعمل. باستخدام Python 3 ، يفشل تمرير /dev/stdout كوسيطة في https://github.com/benoitc/gunicorn/blob/f722a6eb65e51407c420ac3d6be72d03bd773ad0/gunicorn/util.py#L498

👍suriya أعتقد أنني أبحث عن نفس السلوك الذي تبحث عنه - أود تشغيل --capture-log وتمكين --access-logfile=<something> ، لكنني أفضل الانتقال إلى stdout. لا stderr.

تحرير: للتوضيح ، يبدو أن هذا مجرد مشكلة في Python3. باستخدام python3.5.1 ، يفشل تمرير --access-logfile=/dev/stdout إلى gunicorn في بدء تشغيل الخادم.

نعم ، يبدو أنه تم تعطيل تسجيل الوصول افتراضيًا.

huoxy أكثر مما هو الافتراضي ، أعتقد أن المشكلة هي أنه لا توجد طريقة بسيطة لكتابة سجلات الوصول إلى الإخراج القياسي.

huoxy ˋ - access-logfile = -` يجب أن يفي بالغرض. اسمحوا لي أن أعرف إذا لم يكن كذلك.

  • بينوا
    يوم الأربعاء ، 27 يوليو 2016 الساعة 08:49 ، Suriya Subramanian [email protected]
    كتب:

huoxy https://github.com/huoxy أكثر مما هو الافتراضي ، على ما أعتقد
المشكلة هي أنه لا توجد طريقة بسيطة لكتابة سجلات الوصول إليها
الإخراج القياسي.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/benoitc/gunicorn/issues/1184#issuecomment -235501347 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AAA4oj67GbLqwaJaCQ9NOH7-iAXJoMxGks5qZv9fgaJpZM4HHW4G
.

كما أنه من المحتمل أن يكون مشكلة مستند. ولكن يجب طباعة سجل الوصول إلى stdout
عند استخدام - . وإلا فهو خطأ. دعني أعلم...
يوم الأربعاء ، 27 يوليو 2016 الساعة 09:03 ، كتب بينوا تشيسنو [email protected] :

huoxy ˋ - access-logfile = -` يجب أن يفي بالغرض. اسمحوا لي أن أعرف إذا لم يكن كذلك.

  • بينوا
    يوم الأربعاء ، 27 يوليو 2016 الساعة 08:49 ، Suriya Subramanian [email protected]
    كتب:

huoxy https://github.com/huoxy أكثر مما هو الافتراضي ، على ما أعتقد
المشكلة هي أنه لا توجد طريقة بسيطة لكتابة سجلات الوصول إليها
الإخراج القياسي.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/benoitc/gunicorn/issues/1184#issuecomment -235501347 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AAA4oj67GbLqwaJaCQ9NOH7-iAXJoMxGks5qZv9fgaJpZM4HHW4G
.

benoitc كما هو مذكور في # 1293 ، فإن السجلات gunicorn --access-log - تصل إلى الخطأ القياسي. حاولت باستخدام gunicorn --access-log=- ولا يزال السجل ينتقل إلى الخطأ القياسي.

على هذا النحو:
https://github.com/gunicorn/gunicorn/blob/master/gunicorn/glogging.py#L58

المسجل الافتراضي هو console والذي ينتج عن stdout ، لذلك أعتقد أنه إذا كنت بحاجة إلى كل شيء مثلي ، للوصول إلى كل شيء إلى برنامج تشغيل التسجيل gunicorn ، يمكنك فقط ترك هذه الخيارات فارغة.

أيضًا ، الحل الذي أقترحه ، هو إنشاء ارتباط رمزي لملفات السجل إلى /dev/stdout أو /dev/stderror إذا لم يعمل بشكل مباشر:

ln -sf /var/log/gunicorn.access.log  /dev/stdout
ln -sf /var/log/gunicorn.error.log  /dev/stdout

exec newrelic-admin run-program gunicorn --chdir /usr/src/app --name nexchange --bind 0.0.0.0:${GUNICORN_PORT} --workers 3 --log-level=info --log-file=/var/log/gunicorn.error.log --access-logfile=/var/log/gunicorn.access.log nexchange.wsgi:application "$@"

لقد انتقلت للتو إلى Gunicorn 19.7.0 الذي تم إصداره الأسبوع الماضي. لسوء الحظ ، ما زلت لا أستطيع الحصول على سجل الوصول مكتوبًا على أي شيء آخر غير stderr.

لقد حاولت تشغيل برنامج gunicorn بدون خيارات وأيضًا مع جميع التباديل بما في ذلك / عدم تضمين "--access-logfile = - --error-logfile = - --log-level = DEBUG".

هل أفتقد شيئًا أساسيًا حول تسجيل Gunicorn؟ هل هناك شيء ما من بيئتي أو من Django يحتمل أن ينزف ويسبب هذه المشكلة؟

مع ملف التطبيق myapp.py ، جربت ما يلي.

$ python --version
Python 3.5.2
$ gunicorn --version
gunicorn (version 19.7.0)
$ gunicorn --access-logfile - myapp:app 

أستطيع أن أؤكد أن مخرجات سجل الوصول تذهب إلى stdout .

أنا على Python 2.7.14. (غاب بطريقة ما عن الرد السريع منذ أشهر.)

يمكنك أيضًا استخدام accesslog = "-" في gunicorn.config.py الخاص بك

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