سؤال

ولدي موقع على التوالي في جانغو. الواجهة هي لايت باد وباستخدام FCGI لاستضافة جانغو.

وأبدأ عمليات FCGI بلدي كما يلي:

python2.6 /<snip>/manage.py runfcgi maxrequests=10 host=127.0.0.1 port=8000 pidfile=django.pid

لقطع الأشجار، ولدي RotatingFileHandler محددة كما يلي:

file_handler = RotatingFileHandler(filename, maxBytes=10*1024*1024, backupCount=5,encoding='utf-8')

ووتسجيل يعمل. ومع ذلك، يبدو أن الملفات متغايرة عندما لا حتى الحصول على ما يصل إلى 10KB، ناهيك عن 10MB. تخميني هو أن كل حالة FCGI هو التعامل فقط 10 طلبات، ثم إعادة وضع البيض. كل بيضة من FCGI بإنشاء ملف جديد. وأؤكد أن FCGI هو البدء تحت معرف العملية الجديدة بين الحين والآخر (من الصعب معرفة الوقت بالضبط، ولكن أقل من دقيقة).

هل هناك أي وسيلة للالتفاف حول هذه القضايا؟ أود جميع الحالات FCGI تسجيل الدخول إلى ملف واحد حتى تصل إلى الحد الأقصى لحجم، وعند هذه النقطة التناوب ملف سجل ستجري.

هل كانت مفيدة؟

المحلول

وكما ذكر أليكس، وقطع الأشجار هو الخيط آمنة، ولكن معالجات القياسية لا يمكن استخدامها بأمان لتسجيل من عمليات متعددة في ملف واحد.

ConcurrentLogHandler يستخدم قفل الملف للسماح للتسجيل من داخل عمليات متعددة.

نصائح أخرى

في حذائك كنت التحول إلى TimedRotatingFileHandler - - أنا مندهش أن الملف الدورية على أساس حجم مقابض يعطي هذه المشكلة (كما ينبغي أن يكون منيع لعمليات ما تنتج إدخالات السجل)، ولكن النسخة توقيت (وإن لم تكن تسيطر على بالضبط المعلمة كنت تفضل ذلك) يجب أن تحل ذلك. أو كتابة الخاصة، أكثر صلابة، وتناوب معالج الملف الخاص بك (يمكنك أن تأخذ الكثير من مصادر المكتبة القياسية) أن <م> يضمن عمليات مختلفة ليست مشكلة (كما يجب أن تكون أبدا).

وكما يبدو أن استخدام الملف الافتراضي طريقة إلحاق فتح ( "أ") بدلا من الكتابة ( "ث")، إن عملية إعادة البيوض ينبغي إلحاق الملف الموجود، ثم الانتقال عند حد حجم يتم التوصل إليه. لذلك أنا لست متأكدا من أن ما ترونه هو سبب إعادة وضع البيض-العمليات CGI. (وهذا بالطبع يفترض أن اسم الملف لا يزال هو نفسه عند عملية إعادة يولد).

وعلى الرغم من أن حزمة تسجيل هي ذات ألوان، فإنه لا يعالج الوصول المتزامن لنفس الملف من عمليات متعددة - لأنه لا يوجد طريقة قياسية للقيام بذلك في stdlib. نصيحتي العادية هي إعداد عملية الخفي منفصلة الذي ينفذ الخادم المقبس، وأحداث سجلات تلقت عبرها إلى ملف - العمليات الأخرى بعد ذلك فقط بتنفيذ SocketHandler للتواصل مع البرنامج الخفي تسجيل. ثم سوف تحصل على كل الأحداث المتسلسلة إلى القرص بشكل صحيح. تحتوي وثائق بيثون على العمل الخادم مأخذ التي يمكن أن تخدم كأساس لهذه الحاجة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top