Winston: إضافة إمكانية نقل الملفات لتقسيم السجلات حسب التاريخ

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

indexzero -

ما هو شعورك حيال إضافة معلمة API اختيارية إلى نقل الملفات بحيث يمكن تقسيم ملفات السجل حسب التاريخ؟ الفكرة هي أنه في كل يوم جديد ، سيتم إنشاء ملف سجل جديد وسيقوم Winston تلقائيًا بمعالجة كل هذا / معرفة ملف السجل الذي يجب الكتابة إليه بناءً على التاريخ.

feature request

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

ليست هناك حاجة لتعقيد كود Winston عندما تكون هناك أداة قياسية لهذه المهمة: Logrotate (http://linuxcommand.org/man_pages/logrotate8.html)

ال 12 كومينتر

سوف تقبل طلب التصحيح لهذا

رائع! أي اقتراحات لواجهة برمجة التطبيقات؟ كنت أفكر في شيء مثل:

           // Specify path option and default to spanning by day ( 24 hours in each file )
           new (winston.transports.File)({ path: './logs' })

ولكن قد يكون هناك بعض الفوائد في السماح بفلتر تاريخ / وقت مخصص.

ليست هناك حاجة لتعقيد كود Winston عندما تكون هناك أداة قياسية لهذه المهمة: Logrotate (http://linuxcommand.org/man_pages/logrotate8.html)

indexzero هل التصحيح لهذا لا يزال مقبولاً؟ أعلم أن هذا يمكن تنفيذه عبر خيار اسم الملف ولكن يمكنني إضافة خيار آخر لذلك.

إنها ليست مهمة الشياطين الفردية لكل تطبيق تناوب في السجل. هذا هو السبب في أن لدينا أدوات مثل logrotate ، مثل cemuzunlar قال.

تضمين التغريدة

أوافق ، من الناحية المثالية ، هذه لن تكون مشكلة وينستون ، لكن

  • يعمل Winston على Windows ، والذي لا يحتوي على logrotate ، على الرغم من العديد من المحاولات البسيطة (الضعيفة) على مدونات مختلفة (وبعض الاقتراحات لاستخدام cygwin + logrotate ذاتي التجميع ، لكنني أشك في أن ذلك سيكون ممكنًا على أسس نظرية ، على افتراض يحافظ برنامج Winston على الملف مفتوحًا للكتابة ، مما يقيد بشدة ما يمكنك فعله بهذا الملف على Windows)
  • يقوم نقل ملفات Winston بالفعل بتدوير السجل ، فقط يتم تقسيمه حسب حجم الملف وليس التاريخ. كما أنه يحذف الملفات القديمة ، لذا فهي جميع وظائف تدوير السجل الأساسية

أرى...
التفكير بصوت عالٍ: نقل منطق دوران السجل إلى برنامج عقدة منفصل ، لذلك فهو استنساخ بسيط قابل لإعادة الاستخدام يعمل عبر الأنظمة الأساسية.

++ 1

بينما أنا أيضًا من المدافعين عن اللوغروت ، إلا أنها لا تقوم بعملها بمفردها. يعد Logrotate قابلاً للاستخدام جدًا لأنه يوفر طريقة لإخبار البرامج بأن الوقت قد حان لمسح سجلاتهم وإغلاقها.

يحتوي نقل الملف على وظيفة _createStream.checkFile.createAndFlush التي تبدو للوهلة الأولى أنها يجب أن تقوم بالأشياء المناسبة. لاستخدام هذا من أجل logrotate ، اجعل برنامج العقدة الخاص بك يقوم بتعطيل SIGHUP والوصول إلى هذه الوظيفة. ليس لدي وقت قبل عملي اليومي لأكتب الرمز البريدي ، لكنني سأحاول الليلة ونشر نتائجي.

يجب أن تكون الاستجابة لـ SIGHUP بهذه الطريقة قابلة للنقل إلى النوافذ ، وبعد ذلك يتم ترك أي دوران في السجل تستخدمه على النوافذ (مكتبة العقدة أو أي سحر آخر) كتدريب للقارئ.

في حال كان أي شخص آخر يبحث عن هذا:

شكرا على النصيحة ،pccowboy. أنا من أشد المدافعين عن logrotate أيضًا. أنا متردد في استخدام تهيئة واحدة لخدمة node.js (مثل winston File maxsize ، إلخ) وأخرى (logrotate) للخدمات الأخرى (nginx ، و redis ، وما إلى ذلك) وأفضل استخدام logrotate لجميع ملفات السجل الخاصة بي. لقد جمعت وظيفة بسيطة تستمع إلى إشارات HUP وتعيد فتح ملف السجل بعد الدوران.

إذا سنحت لي الفرصة ، سأحاول إعادة كتابة هذا بطريقة أنظف (على سبيل المثال ، كخيار تكوين لنقل الملف) وإنشاء طلب سحب.

https://gist.github.com/suprememoocow/5133080

ثابت ب # 205.

مذهل!

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