سؤال

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

على وجه التحديد ؛

  • أين ملف التكوين تذهب في .الحرب حزمة الملف ؟
  • أين الناس من الدخول إلى النسبية أو المطلقة مسار شقة أو ملف أو قاعدة بيانات ؟
  • لا Log4J تسجيل تذهب مباشرة إلى تطبيق ملف سجل الخادم تلقائيا أو هو شيء لديك ؟ في هذه الحالة أنا باستخدام هر ، ولكن أنا غالبا ما تستخدم Jrun.
  • أي gotchas يجب أن يكون على بينة من أجل تطبيق ويب تسجيل الدخول?

حاليا أنا أستخدم Log4J ولكن أتصور أن أفضل الممارسات تطبق عالميا على تسجيل كافة التطبيقات.

تحرير:
واحد بالإضافة إلى الأسئلة في الأعلى.

  • أين initilize السجل التكوين ؟

في التقليدية التطبيق ، أنا أفعل هذا في نقطة الدخول;

DOMConfigurator.configureAndWatch("log4j.xml");

ما من شأنه تطبيق ويب ما يعادلها ؟

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

المحلول

أضع التكوين على الحزمة الافتراضي:src/

الدخول إلى الملفات باستخدام ${كاتالينا.المنزل} نظام الملكية:

log4j.appender.???.file=${catalina.home}/logs/system.log

نصائح أخرى

أنصح لك استخدام SLF4J.هذا هو بسيط تسجيل الواجهة الذي يدعم الأكثر شعبية تسجيل أنظمة (Log4j, commons-تسجيل, تسجيل Java API و Logback).استخدامه ، سوف تتمكن من استبدال تؤكد تسجيل النظام أي بنسبة بسيطة CLASSPATH التحديث.

فائدة أخرى من SLF4J هي معلمات المكالمات, مما يقلل من القبيح تسجيل رمز.

في الواقع, أنها توصي استخدام SLF4J مع Logback. Logback هو خليفة Log4J.و تم تصميمه من قبل المؤلف نفسه.

أين ملف التكوين تذهب في .الحرب حزمة الملف ؟ جذر classpath.

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

لا Log4J تسجيل تذهب مباشرة إلى تطبيق ملف سجل الخادم تلقائيا أو هو شيء لديك ؟ في هذه الحالة أنا باستخدام هر ، ولكن أنا غالبا ما تستخدم Jrun. إذا كنت تستخدم وحدة التحكم appender, نعم, انها سوف تكون مسجلا في حاوية بريمج ملف السجل.

أي gotchas يجب أن يكون على بينة من أجل تطبيق ويب تسجيل الدخول? إذا كنت تسجيل من المواضيع المختلفة استخدام logback, إنه مؤشر الترابط-الآمن وتعريضا معلمات سجل الرسائل.

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

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

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

أوصي إلى سجل المكالمات API (log4j) عبر slf4j.حتى إذا كنت تستخدم log4j الويب حاوية أو اعتمادا وحدات استخدام سجل API مثل جافا.util.تسجيل الدخول أو جاكرتا العموم تسجيل.Slf4j يوفر جسر وحدات توجيهها إلى slf4j API.ونتيجة لذلك ، سجل كل رسائل مكتوبة من قبل log4j في هذه الحالة.

ممتازة الورق كيف طلب تسجيل حق يحتوي على مجموعة من gotchas.

أعتقد أن لديك أسئلة أخرى تم الرد عليها من قبل أشخاص آخرين في هذه الصفحة.

كما ننصح باستخدام SLF4J.

شيء آخر:بعد speakable تمثيل الكائنات يمكن توفير بعض الوقت.

  • وضع log4j في الحاوية (server) و إنشاء السليم appenders في التطبيق
  • نسبة إلى الخادم المسار ، ولكن هذا يعتمد على الاحتياجات الخاصة بك
  • نحن نستخدم appenders الذي سجل ملفات مختلفة ، يعتمد على الاحتياجات الخاصة بك ، على سبيل المثالالملفات السبات معلومات/الإحصاءات واحد التطبيق فقط ، إلخ.
  • لا تسجيل الدخول إلى الكثير ، فإنه يبطئ التطبيق أسفل

شخصيا أضع log4j.خصائص ويب-INF دليل استخدام الحرف الأول بريمج مع التعليمات البرمجية التالية :

public class InitServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {

private static final String LOG4J_FILE = "WEB-INF/log4j.properties";

public InitServlet() {
    super();
}

@Override
public void init() throws ServletException {
    super.init();
    PropertyConfigurator.configure(getServletContext().getRealPath(LOG4J_FILE));
    LogFactory.getLog(InitServlet.class).info("LOG 4J configured");
}

}

  • أين ملف التكوين تذهب في .الحرب حزمة الملف ؟

في جذور classpath ولكن...لا تضع ملف التكوين في الحرب الحزمة.كنت لا تريد أن حزم و نشر التطبيق إذا قمت بتغيير التكوين تسجيل, أليس كذلك ؟ أفضل الممارسات وضع ملف التكوين في مكان ما في classpath خارج الحرب.

  • أين الناس من الدخول إلى النسبية أو المطلقة مسار شقة أو ملف أو قاعدة بيانات ؟

أنا عادة تسجيل الدخول إلى نظام الملفات على فصل القسم (ملفات السجل يمكن أن تنمو بسرعة كبيرة و يجب أن لا تمنع تطبيق أو نظام التشغيل إذا أصبحت كبيرة جدا).لا تستخدم أكثر من مرة المسار المطلق استنادا إلى نموذج التالية:/var/المشاريع/<PROJECT_NAME>/<PRODUCT>/<CLUSTER_NAME>/سجلات/<INSTANCE_NAME>.حيث سجل <PROJECT_NAME> هو اسم المشروع ، <PRODUCT> يمكن أباتشي ، هر ، يبلوغيتش,..., <CLUSTER_NAME> اسم المجموعة <INSTANCE_NAME> اسم مثيل داخل المجموعة.تسجيل الدخول إلى نظام الملفات أسرع في قاعدة البيانات الخاصة بنا.العيب هو أن السجلات لا مركزية إذا كنت تستخدم عدة حالات و الأجهزة المادية.ولكن دمج يمكن القيام به بسهولة مع البرنامج النصي.

  • لا Log4J تسجيل تذهب مباشرة إلى تطبيق ملف سجل الخادم تلقائيا أو هو شيء لديك ؟ في هذه الحالة أنا باستخدام هر ، ولكن أنا غالبا ما تستخدم Jrun.

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

  • أي gotchas يجب أن يكون على بينة من أجل تطبيق ويب تسجيل الدخول?

إذا كنت تستخدم log4j لا تنسى أن استخدام isDebugEnabled() قبل الدخول:

if(logger.isDebugEnabled()) {
  logger.debug("Bla Bla Bla");
}
  • أين ملف التكوين تذهب في .الحرب حزمة الملف ؟

عادة لا تضع أي التكوين تسجيل في التطبيق ، بل ترك ذلك إلى appserver مدراء لتكوين تسجيل الملقم واسعة.في حالات نادرة أريد log4j التكوين نشرها مع webapp, على شبكة الإنترنت-INF هو الطريق المعتاد.

  • أين الناس من الدخول إلى النسبية أو المطلقة مسار شقة أو ملف أو قاعدة بيانات ؟

مرة أخرى ، يعتمد على appserver الإعدادات.مشترك واحد سجل الملف appserver وتناوب على أساس يومي هو المعتاد الإعداد.إذا كان هناك أي التطبيق الاحتياجات الخاصة, المشرف قد تكوين منفصلة السجل للحصول على التطبيق (تتميز حزمة / أسماء فئة).

  • لا Log4J تسجيل تذهب مباشرة إلى تطبيق ملف سجل الخادم تلقائيا أو هو شيء لديك ؟ في هذه الحالة أنا باستخدام هر ، ولكن أنا غالبا ما تستخدم Jrun.

انظر أعلاه.عن هر تستخدم لأغراض التنمية ، كنت مجرد إلقاء نظرة على التسجيل (log4j) تكوين وإضافة التطبيق محددة معينة هناك.

  • أي gotchas يجب أن يكون على بينة من أجل تطبيق ويب تسجيل الدخول?الأداء.الحد ,سجل مستوى الحد الأدنى (أيتحذير أو خطأ) بمجرد الذهاب العيش.استخدام if (log.isDebugEnabled()) { log.debug("..."); } و على حد سواء يبني في التعليمات البرمجية الخاصة بك.

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

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