it-swarm.com.de

Wie verwende ich mehrere Konfigurationen mit Rückmeldung in einem Projekt?

Die Konfigurationsdatei für die Rückmeldung befindet sich im Klassenpfad und ist daher Eclipse-projektspezifisch, was ich nicht möchte. Ich verwende mehrere Java-Dienstprogramme, die sich alle in einem einzigen Projekt befinden (dies teilt den Klassenpfad), und für einige von ihnen muss ich eine bestimmte Konfiguration verwenden.

Ich habe die Variablensubstitution und den Joram-Konfigurator ausprobiert, aber bei mir hat nichts funktioniert. Das war höchstwahrscheinlich meine Schuld, und ich werde es eines Tages lösen, aber im Moment würde ich eine einfache Lösung brauchen.

36
maaartinus

OPTION 1: Geben Sie den Speicherort der Logback-Konfigurationsdatei mit der Systemeigenschaft logback.configurationFile an. Auf diese Weise können Sie mehrere Konfigurationsdateien pro Projekt erstellen. Gemäß der logback-Dokumentation kann der Wert der Eigenschaft this eine URL, eine Ressource im Klassenpfad oder ein Pfad zu einer Datei außerhalb der Anwendung sein. Zum Beispiel:
-Dlogback.configurationFile=/path/to/config.xml

OPTION 2: Verwenden Sie die Variablenersetzung, um den Namen der Protokolldatei mit einer Systemeigenschaft festzulegen. Zum Beispiel:

  1. Ihr Appender kann die Datei wie folgt einstellen:
    <file>/var/tmp/${mycompany.myapplication}.log</file>
  2. Und dann können Sie den Wert dieser Variablen beim Start von Java angeben:
    -Dmycompany.myapplication=SomeUtility

OPTION 3: Legen Sie die Protokollierstufe mit einer Systemeigenschaft fest. Dadurch können Sie mehr oder weniger protokollieren. Zum Beispiel:

  1. Fügen Sie dies in Ihre Logback-Konfigurationsdatei ein:
    <logger name="com.mycompany" level="${mycompany.logging.level:-DEBUG}"/>
    Dadurch wird das angegebene Paket standardmäßig auf DEBUG-Ebene protokolliert.
  2. Wenn Sie die Protokollierungsstufe in einer bestimmten Anwendung in INFO ändern möchten, übergeben Sie beim Starten der Anwendung Folgendes an Java:
    -Dmycompany.logging.level=INFO

OPTION 4: Einen Appender hinzufügen/entfernen, indem ein Befehlszeilenparameter für Systemeigenschaften an Java übergeben wird. Auf diese Weise können Sie sich an verschiedenen Orten anmelden. Beachten Sie, dass bedingte Verarbeitung janino erfordert. Zum Beispiel:

  1. Fügen Sie dies in Ihre Logback-Konfigurationsdatei ein, wo immer Sie einen <appender-ref> eingeben würden, und ändern Sie den ref-Wert in einen Ihrer eigenen <appender>s.
    <if condition="property("mycompany.logging.console").equalsIgnoreCase("true")"> <then><appender-ref ref="STDOUT"/></then></if>
  2. Wenn Sie diesen Appender aktivieren möchten, übergeben Sie beim Starten der Anwendung Folgendes an Java:
    -Dmycompany.logging.console=true

In Bezug auf Systemeigenschaften übergeben Sie sie als -D-Argumente an Java, z.
Java -Dmy.property=/path/to/config.xml com.mycompany.MyMain

58
jtoberon

Ich habe eine andere Option basierend auf Leonidas Blog verwendet. Es gibt die optionale Eigenschaftendatei (environment.properties), die die Umgebungseigenschaft und benutzerdefinierte Konfigurationen enthält (z. B. logback-env-test.xml). Alle diese Dateien müssen sich im Klassenpfad befinden.

Wenn die Eigenschaftendatei existiert und die Eigenschaft logEnv definiert, z.

logEnv = dev66

das Logback versucht, die benutzerdefinierte Konfiguration aus logback-env-dev66.xml zu finden und einzuschließen

<included>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <root level="DEBUG">
        <appender-ref ref="STDOUT" />
    </root>
</included>

Im Übrigen wird auf die Standardkonfiguration (<else> - Abschnitt) zurückgesetzt. Beachten Sie, dass in benutzerdefinierten Konfigurationsdateien das Tag <included> Anstelle von <configuration> Verwendet wird.

die logback.xml, um alle oben genannten Dinge zu verwalten:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="5 seconds" debug="true">
    <!-- To skip error if property file doesn't exist -->
    <define name="propExists" class="ch.qos.logback.core.property.ResourceExistsPropertyDefiner">
        <resource>environment.properties</resource>
    </define>
    <if condition='${propExists}'>
        <then>
            <property resource="environment.properties" />
        </then>
    </if>
    <!-- If specific configuration exists, load it otherwise fallback to default (<else> section)  -->
    <define name="confExists" class="ch.qos.logback.core.property.ResourceExistsPropertyDefiner">
        <resource>logback-env-${logEnv}.xml</resource>
    </define>
    <if condition='${confExists}'>
        <then>
            <include resource="logback-env-${logEnv}.xml"/>
        </then>
        <else>
            <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
                <encoder>
                    <pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
                </encoder>
            </appender>
            <root level="INFO">
                <appender-ref ref="STDOUT" />
            </root>
        </else>
    </if>
</configuration>
0
foal

In einer Spring Boot-Anwendung können Sie auf Spring Profiles in der Logback-Konfigurationsdatei verweisen.

Siehe diesen Artikel .

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <springProfile name="dev">
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
      <encoder>
        <pattern>
          %d{HH:mm:ss.SSS} | %5p | %logger{25} | %m%n
        </pattern>
        <charset>utf8</charset>
      </encoder>
    </appender>
    <root level="DEBUG">
      <appender-ref ref="CONSOLE"/>
    </root>
  </springProfile>
  ...
0