سؤال

وأود أن تصفية سجل الأحداث القادمة من مكون معين من مكتبة 3rd الطرف، استنادا إلى مضمون الرسالة السجل. أريد فقط هذه التصفية ليتم تطبيقها عند إنشاء الحدث سجل من قبل مسجل معين: "org.restlet.Component.LogService". تصفية نفسها هي مجرد مباراة الأساسية ضد رسالة الحدث السجل.

ولدي AsyncAppender المركزي الذي يسجل لappenders متعددة. في حالة أن الأحداث القادمة من LogService لا ترشح بها، أود منهم أن يعامل نفسه كما هي الآن - وهذا هو، والحصول على إرسالها إلى AsyncAppender. أنا لا أريد لإضافة محددات تصفية لAsyncAppender، لأن هذا يبدو غير فعال بشكل رهيب (ولست بحاجة لتصفية ALL الأحداث، فقط تلك القادمة من مسجل LogService).

وإذا ما حاولت القيام به هو مشارك مسجل LogService مع العرف Appender، والذي بدوره يرتبط مع تصفية مخصصة:

    <appender name="filtered" class="mystuff.FilteredAppender">
            <filter class="mystuff.EventFilter"/>
            <appender-ref ref="ASYNC"/>
    </appender>

    <logger name="org.restlet.Component.LogService">
            <appender-ref ref="filtered"/>
    </logger>

والخطأ أرى في الوقت الحاضر الحصول على ...

<اقتباس فقرة>   

وlog4j: خطأ لا مجموعة تخطيط لappender اسمه [تصفيتها]

... يقول لي هناك شيء خاطئ مع تصميمي: لا أعتقد أن بلدي appender مخصصة يجب أن يهتم التخطيط، ومنذ ذلك حقا يحتاج فقط لتمرير أو عدم تمرير الحدث سجل على طول. أيضا، فإن هذا النهج يتطلب فئتين حسب الطلب، واحد منهم (mystuff.FilteredAppender) لا يضيف قيمة على الإطلاق -. انها فقط هناك لعقد تصفية مخصصة

وأحب أن تفعل شيئا أنظف بكثير مثل ...

    <logger name="org.restlet.Component.LogService">
            <filter class="mystuff.EventFilter"/>
    </logger>

و... ولكن هذا ما يبدو غير معتمدة من قبل الإطار log4j.

هل هناك طريقة نظيفة جيدة للقيام حالة تصفية الطريقة التي أريد أن نفعل ذلك؟

نصائح أخرى

وLog4J ديه مكتبة إضافات ( جافادوك) حيث يوفر LoggerMatchFilter، لتصفية على أسماء المسجل. تعيين اسم مسجل وعما إذا كان في قبول أو رفض (الافتراضي هو قبول).

في طريقة decide من مرشح، فإنه يقارن اسم مسجل لLoggingEvent object.getLoggerName() من أجل المساواة. إنها مرشح بسيط من المستغرب واضح وأنا مندهش تماما أنها لا تأتي بشكل افتراضي مع Log4j.

وبدلا من ذلك، إذا كنت ترغب فقط لتهدئة مكتبات 3rd الطرف، لقد وجدت ما يلي لتكون مفيدة:

<!-- LOGGER NEUTER -->
<logger name="org.apache"><level value="WARN"/></logger>
<logger name="org.springframework"><level value="WARN"/></logger>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top