مشكلة في تسجيل العموم/إعداد Log4j في تطبيق الويب الربيعي مع Tomcat 6

StackOverflow https://stackoverflow.com/questions/217929

  •  03-07-2019
  •  | 
  •  

سؤال

أواجه مشكلة في إعداد التسجيل في تطبيق ويب محدد تم نشره ضمن Tomcat 6.

يستخدم تطبيق الويب واجهة برمجة تطبيقات تسجيل المشاعات، ويجب استخدام log4j في وقت التشغيل.تم إنشاء ملف السجل ولكنه يظل فارغًا - ولا توجد إدخالات سجل.

الإعداد هو ما يلي:

ويب-INF/web.xml:

 <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/log4j.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  </listener>

WEB-INF/classes/commons-logging.properties:

org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger

ويب-INF/log4j.xml:

<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>

  <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
    ...
  </appender>
  <appender name="FILE" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="${catalina.home}/logs/my.log"/>
    ...
  </appender>

  <logger name="my.package">
    <level value="INFO"/>
  </logger>

  <root>
    <level value="ERROR"/>
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="FILE"/>
  </root>
</log4j:configuration>

يتم إنشاء الملف logs/my.log، ولكن لا تظهر أي سجلات.توجد سجلات معلومات على وحدة تحكم Tomcat، ولكن ليس مع تكوين نمط التخطيط.

تم تضمين commons-logging-1.1.1.jar وlog4j-1.2.14.jar في WEB-INF/lib.أي فكرة ما هو الخطأ هنا؟

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

المحلول

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

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

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

نصائح أخرى

كن حذرا بشكل خاص أن لديك لا وضع log4j.jar في دليل Tomcat commons/lib.إذا قام محمل الفئة الجذر بتحميل مكتبات log4j، فسوف تواجه تعارضات ومشكلات في التهيئة عندما تحاول تطبيقات الويب الخاصة بك أيضًا استخدام log4j.

إذا كنت بحاجة إلى استخدام log4j لتسجيل Tomcat الشائع، فستحتاج إلى توخي الحذر حتى لا تحاول تطبيقات الويب الخاصة بك تحميل log4j أيضًا.إذا كان لديك تطبيقات ويب متعددة على الخادم، فستحتاج إلى الانضباط بحيث لا تؤثر تهيئة سجل كل تطبيق ويب على تهيئة تطبيقات الويب الأخرى.سيحتاج كل تطبيق ويب إلى استخدام معرفات Logger فريدة، والتي يمكن تحقيقها باستخدام أسماء حزم فريدة.

يؤدي استخدام log4j الشائع في Tomcat مع تطبيقات الويب المتعددة إلى حدوث تعارضات خطيرة عندما يكون لديك مكتبات مشتركة تريد جميعها إجراء التسجيل، مثل Hibernate أو Spring.قد يقوم تطبيق الويب التالي الذي يحاول تهيئة log4j بإغلاق مُسجل التطبيق السابق.يمكن أن يكون فوضى.

وكان لي مشكلة مماثلة وجدت الإصلاح الآن. بدء هر مع معلمة إضافية:

و-Dorg.apache.commons.logging.LogFactory = org.apache.commons.logging.impl.LogFactoryImpl

وتحتاج إلى تجميع المكون الإضافي للحصول على كامل المشاعات قطع الأشجار. افتراضيا يستخدم القط 6 على تنفيذ ضمني من المشاعات قطع الأشجار التي دائما المندوبين إلى java.util.logging.

وتعليمات البناء هنا http://tomcat.apache.org/tomcat- 6.0 ثيقة / building.html

ثم استبدال هر-juli.jar في الدليل / بن لالقط ووضع-هر جولي-adapters.jar في الدليل / ليب جنبا إلى جنب مع log4j والتكوين.

وإذا كنت تستخدم log4j + تسجيل المشترك، يمكنك تجنب معظم تكوينات المذكورة أعلاه. تسجيل مشترك LogFactory لديها ميزة اكتشاف مماثلة لJAXP، في أعقاب الأسبقية، والبحث عن تطبيقات دخول،    ويعزو 1. تكوين org.apache.commons.logging.Log داخل commons-logging.properties ملف    2. نظام الملكية org.apache.commons.logging.Log    3. إذا كان Log4J متوفرة في مسار الطبقة، واستخدام فئة مجمع المقابلة (Log4JLogger).    4. Jdk14Logger    5. SimpleLog

وفقط للتأكد من، سواء شيوعا-logging.jar وموحد تسجيل-api.jar وlog4j.jar في CLASSPATH.

ربما أكون مخطئا.يرجى تجربة ما يلي:

أ) أضف المُلحق إلى my.package كـ:أوب) قم بتقليل مستوى سجل الجذر إلى INFO

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