سؤال

هل من الممكن الإشارة إلى متغيرات بيئة النظام (بدلاً من خصائص نظام Java) في ملف تكوين log4j xml؟

أود أن أكون قادرًا على القيام بشيء مثل:

<level value="${env.LOG_LEVEL}" />

والحصول على ذلك من متغيرات بيئة النظام، حتى أتمكن من تجنب الاضطرار إلى تمرير أشياء كثيرة باستخدام معلمات -D.

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

المحلول

وتم توثيقه بناء الجملة هذا فقط في 2.X log4j لذلك تأكد من أنك تستخدم الإصدار الصحيح. أنها لا تعمل على الإصدارات 1.x.

    <Appenders>
    <File name="file" fileName="${env:LOG_PATH}">
        <PatternLayout>
            <Pattern>%d %p %c{1.} [%t] %m %ex%n</Pattern>
        </PatternLayout>
    </File>
</Appenders>

نصائح أخرى

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

<level value="${log_level}" />

وعند بدء التشغيل ...

java -Dlog_level=$LOG_LEVEL your_app

أعتقد أن هذا غير مدعوم، ولكن في الأساس يمكنك القيام بأمرين لإحضار متغيرات البيئة الخاصة بك:

  1. استخدم System.setProperty قبل تكوين Log4J

  2. قم بتحويل متغيرات البيئة (الخاصة بك) إلى خصائص النظام في المشغل الخاص بك

الخيار الأول يتلخص بشكل أساسي في هذا:

for (Map<String,String>.Entry entry : System.getenv().entrySet()) {
  System.setProperty(entry.getKey(), entry.getValue());
}

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

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

java -DMY_ENV=$MY_ENV -DMY_OTHER_ENV=$MY_OTHER_ENV -cp ... com.example.Main

من الممكن أيضًا تغيير البرامج النصية لبدء تشغيل الخادم الخاص بك لدعم ذلك، على سبيل المثال.catalina.sh أو ما شابه ذلك.

وتحتاج إلى وضع نقطتين بين الحياة الفطرية واسم متغير، مثل هذا:

<level value="${env:LOG_LEVEL}" />

وإنشاء متغير النظام. أنا أفضل أن استخدام setenv.bat لهذه المتغيرات.

@echo off
rem app specific log dir
set "APP_LOG_ROOTDIR=../app/app-log"
exit /b 0

إضافة إشارة في ملف log4j.xml

<appender name="fileAppender" class="org.apache.log4j.RollingFileAppender">
  <param name="Threshold" value="DEBUG" />
  <param name="MaxFileSize" value="512KB" />
  <param name="MaxBackupIndex" value="10" />
  <param name="File" value="${APP_LOG_ROOTDIR}/app.log"/>
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%d %-5p %c{1} %m %n" />
  </layout>
</appender>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top