سؤال

هل من الممكن تحديد المنطقة الزمنية التي سيستخدمها Log4J؟ أحتاج إلى التواريخ في ملف السجل لتكون منطقة زمنية مختلفة عن التطبيق. log4j PatternLayout الاستخدامات SimpleDateFormat. لسوء الحظ ، لا يبدو أن هناك وسيلة للسيطرة SimpleDateFormatالمنطقة الزمنية عبر سلسلة الأنماط (DateFormat لديها setTimeZone الطريقة ولكن هذا لا يساعد).

نظرت إلى مصدر Log4J و SimpleDateFormat يتم تنظيمه في PatternParser.finalizeConverter. لسوء الحظ ، لا توجد طريقة سهلة للحصول على DateFormat لتعيين المنطقة الزمنية.

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

المحلول

إذا كنت تستخدم ملف JAR LOG4J الإضافي على ClassPath الخاص بك ، فإن فئة endustantpatternlayout تدعم خيار التكوين هذا. انظر جافادوك في هذا الرابط. يتم التعامل معها كجزء من مكون نمط ٪ D مثل هذا:

log4j.appender.stdout.layout.ConversionPattern=%d{}{America/New_York} %p [%c] - %m%n

يمكنك تنزيل حزمة الإضافات هنا.

نصائح أخرى

حالتي ... يجب تغيير patternlayout إلى تعزيز patternlayout. (log4j-1.2.17.jar)

log4j.appender.logfile.layout = org.apache.log4j.envancedpatternlayoutlog4j.appender.logfile.layout.conversionpattern = [٪ d {iso8601} {gmt+9}] ٪ - 5p - ٪ m ٪ n

يحتوي نمط السجل أعلاه على فكرة صحيحة ولكنه غير صحيح تمامًا (لا تحصل على أي طابع زمني في السجل).
استخدم هذا النمط بالتأكيد:
%d{ISO8601}{America/New_York} %p [%c] - %m%n
أو
%d{ISO8601}{GMT-5} %p [%c] - %m%n

من الأفضل استخدام شيء مثل {America/new_york} بدلاً من {gmt-5} لأنه من خلال تحديد منطقة زمنية سيتم إجراء تعديل تلقائي إذا كانت التوفير في ضوء النهار قيد التشغيل. سيؤدي تحديد شيء مثل GMT-5 إلى ضبط المنطقة الزمنية لـ GMT بمقدار الساعات المحددة.

وأيضًا أيضًا إذا كنت تتجه إلى Dinamicaly Obtein في المنطقة الزمنية الافتراضية ، فيمكنك تمديد المحسّن والكتابة على الطريقة "setConversionPattern" مثل هذا:

@Override
public void setConversionPattern(String conversionPattern) {
    String defaultTimeZoneId = TimeZone.getDefault().getID();
    String conversionPatternModif = conversionPattern.replaceAll(
        "\\%d\\{([^\\{\\}]*)\\}([ ]*[^\\{]*)", 
        "%d{$1}{"+defaultTimeZoneId+"}$2");

    super.setConversionPattern(conversionPatternModif);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top