2016-08-04 66 views
1

Ich arbeite an einem Java EE-Anwendungsprojekt, das im Allgemeinen log4j (Version 1.2.x) in Modulen und .war Kontexten verwendet.Wie kann ich die EAR-App log4j aktivieren, wenn ich TomEE 7.0.1 über log4j.xml anmelde?

Grundsätzlich ist das Modul Aufbau über Maven wie folgt:

| # app-bundle.ear 
| - app-log4j-config.jar 
    | - src/main/resources/log4j.xml 
| - app-backend-module.jar (ejb-module) 
| - app-web-ui-module.war 
| - app-web-service-module.war 

Also ich habe nur genau eine log4j.xml für die gesamte EAR App Bundle.

ein TomEE 7.0.x Anwendungsserverumgebung gegeben, muss ich wissen, welche Schritte nur notwendig sind, um die anwendungsspezifischen Protokollmeldungen log (wie über log4j.xml konfiguriert), aber nicht die vom Anwendungsserver erzeugt Nachrichten.

z. Start- und Herunterfahrenachrichten sollten auf catalina.out gehen, aber alle Protokollausgaben von verschiedenen Backend- oder Webmodulen (siehe oben) sollten gedruckt/protokolliert werden, wie von meiner log4j-Konfiguration angegeben.

Meine Fragen sind:

  1. Habe ich die Standard conf/system.properties des TomEE in irgendeiner Weise anpassen müssen? Wenn ja, was genau muss hinzugefügt/bearbeitet werden?

  2. Wo ich log4j-<version>.jar setzen Sie: in (a)lib des TomEE oder (b) den apps Ordner meiner EAR Bündel withing?

Was ich bisher versucht:

  • Sowohl log4j.xml und log4j-<version>.jar in lib von TomEE Installation -> kein Erfolg

  • Sowohl app-log4j-config.jar und log4j-<version>.jar mit der EAR gebündelt -> nein Erfolg

  • Extrahiert log4j.xml im apps/project zusammen mit log4j-<version>.jar gebündelt -> kein Erfolg

Jede Hilfe wäre sehr zu begrüßen.

EDIT: Ich verwende ein TomEE 7.0.1 in der PLUS-Variante.

EDIT-2: Die ear wird über Maven erzeugt wird, wie folgt:

<dependencies> 
    <dependency> 
     <groupId>de.myapp</groupId> 
     <artifactId>app-log4j-config</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>de.myapp</groupId> 
     <artifactId>app-backend-module</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>ejb</type> 
    </dependency> 
    <dependency> 
     <groupId>de.myapp</groupId> 
     <artifactId>app-web-ui-module</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>war</type> 
    </dependency> 
     <dependency> 
     <groupId>de.myapp</groupId> 
     <artifactId>app-web-service-module</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>war</type> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>${slf4j.version}</version> 
     <type>jar</type> 
     <exclusions> 
      <!-- This dependency will be provided globally in the TomEE deployment --> 
      <exclusion> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-api</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>${log4j.version}</version> 
     <type>jar</type> 
    </dependency> 
</dependencies> 

<build> 
    <finalName>app-bundle</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-ear-plugin</artifactId> 
      <version>2.10.1</version> 
      <!-- configuring the ear plugin --> 
      <configuration> 
       <modules> 
        <webModule> 
         <groupId>de.myapp</groupId> 
         <artifactId>app-web-service-module</artifactId> 
        </webModule> 
        <webModule> 
         <groupId>de.myapp</groupId> 
         <artifactId>app-web-ui-module</artifactId>       
        </webModule> 
        <ejbModule> 
         <groupId>de.myapp</groupId> 
         <artifactId>app-backend-module</artifactId> 
        </ejbModule>       
        <jarModule> 
         <groupId>org.slf4j</groupId> 
         <artifactId>slf4j-log4j12</artifactId> 
         <includeInApplicationXml>true</includeInApplicationXml> 
        </jarModule> 
        <jarModule> 
         <groupId>log4j</groupId> 
         <artifactId>log4j</artifactId> 
         <includeInApplicationXml>true</includeInApplicationXml> 
        </jarModule> 
       </modules> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

Die log4j.xml ist dies:

<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" 
       value="%d{ISO8601} %-5p [%t] %c{1}(%L): %m%n"/> 
    </layout> 
</appender> 

<appender name="DEBUGFILE" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="datePattern" value="'.'yyyy-MM-dd"/> 
    <param name="file" value="logs/app-bundle-DEBUG.log"/> 
    <param name="Append" value="true"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %c{1}(%L): %m%n"/> 
    </layout> 
    <filter class="org.apache.log4j.varia.LevelMatchFilter"> 
     <param name="LevelToMatch" value="debug"/> 
    </filter> 
    <filter class="org.apache.log4j.varia.LevelMatchFilter"> 
     <param name="LevelToMatch" value="info"/> 
    </filter> 
    <filter class="org.apache.log4j.varia.DenyAllFilter"/> 
</appender> 

<appender name="INFOFILE" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="datePattern" value="'.'yyyy-MM-dd"/> 
    <param name="file" value="logs/app-bundle-INFO.log"/> 
    <param name="Append" value="true"/> 
    <param name="Threshold" value="INFO"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %c{1}(%L): %m%n"/> 
    </layout> 
    <filter class="org.apache.log4j.varia.LevelMatchFilter"> 
     <param name="LevelToMatch" value="info"/> 
    </filter> 
    <filter class="org.apache.log4j.varia.DenyAllFilter"/> 
</appender> 

<appender name="WARNFILE" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="datePattern" value="'.'yyyy-MM-dd"/> 
    <param name="file" value="logs/app-bundle-WARN.log"/> 
    <param name="Append" value="true"/> 
    <param name="Threshold" value="WARN"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %c{1}(%L): %m%n"/> 
    </layout> 
    <filter class="org.apache.log4j.varia.LevelMatchFilter"> 
     <param name="LevelToMatch" value="warn"/> 
    </filter> 
    <filter class="org.apache.log4j.varia.DenyAllFilter"/> 
</appender> 

<appender name="ERRORFILE" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="datePattern" value="'.'yyyy-MM-dd"/> 
    <param name="file" value="logs/app-bundle-ERROR.log"/> 
    <param name="Append" value="true"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %c{1}(%L): %m%n"/> 
    </layout> 
    <filter class="org.apache.log4j.varia.LevelMatchFilter"> 
     <param name="LevelToMatch" value="error"/> 
    </filter> 
    <filter class="org.apache.log4j.varia.LevelMatchFilter"> 
     <param name="LevelToMatch" value="fatal"/> 
    </filter> 
    <filter class="org.apache.log4j.varia.DenyAllFilter"/> 
</appender> 

<logger name="de.myapp"> 
    <level value="INFO"/> 
</logger> 

<root> 
    <level value="WARN"/> 
    <!-- 
    <appender-ref ref="CONSOLE"/> 
    --> 
    <appender-ref ref="ERRORFILE"/> 
    <appender-ref ref="WARNFILE"/> 
    <appender-ref ref="INFOFILE"/> 
    <appender-ref ref="DEBUGFILE"/> 
</root> 

EDIT-3: Ich versuche, eine dünne WAR-Datei über Maven über das erwähnte lib Verzeichnis zu erstellen:

<defaultLibBundleDir>lib/</defaultLibBundleDir> 
    <skinnyWars>true</skinnyWars> 

Dies gilt auch nicht gelingen.

EDIT-4: Ich habe die sl4j-api.jar an das EAR-Bündel über

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>${slf4j.version}</version> 
    <type>jar</type> 
</dependency> 

<jarModule> 
    <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <includeInApplicationXml>true</includeInApplicationXml> 
</jarModule> 

hinzugefügt On TomEE die Dateien beim Start wie im logs Verzeichnis erwartet erstellt. Log-Ausgabe geht jedoch immer noch in catalina.out und nicht in den angegebenen Dateien.

EDIT-5: Ich habe das Projekt nicht korrekt über Maven neu erstellt. Schließlich die sl4j-api.jar zu der EAR Bündel Modul ist die Lösung für das Problem!

Antwort

2

Das Problem in der Tat der fehlenden slf4j-api im'.ear' verwandt war verwenden wie vorgeschlagen bündeln.

das Problem zurückzuverfolgen ich ein Github Sample geschaffen habe, die ein Beispiel dafür ist, wie in einem ear Kontext slf4j mit TomEE integrieren.

Sie müssen sicherstellen:

  1. slf4j-* und benutzerdefinierte Implementierung als jar Modul gebündelt werden muss, in dem ear

  2. Shared-Logger-Konfiguration in einem eigenen Modul zur Verfügung gestellt werden muss, die gebündelt als jar Modul im ear

Hoffe das hilft jemandem, der die gleichen Probleme erlebt.

2

Normalerweise sollten Sie log4j * in lib Teil des Ohres setzen. Was genau funktioniert bei diesem Setup nicht?

edit: auch sicherstellen, dass Sie slf4j-api entlang slf4j- hinzufügen, wenn Sie Ihre eigene impl von slf4j bieten sonst wird es den Behälter ein

+0

Ich habe gerade die Maven-Konfiguration hinzugefügt, die verwendet wird, um das EAR zu bündeln. In meinem Verständnis wird das log4j * Zeug in den richtigen Abschnitt gebracht? Wir sehen keine Art von Protokollausgabe in den spezifischen Zielen ... stattdessen wird alles in catalina geschrieben.out – rzo

+0

Wenn Sie erwarten, slf4j zu verwenden, dann müssen Sie * im Ohr * slf4h-api bereitstellen, sonst Sie am Ende mit Container eins mit seiner Standardbindung (slf4j-jdk14), die JULi (conf/logging.properties) –

+0

verwendet @rmannibucau könnten Sie Ihre Antwort mit den Informationen aus Ihrem letzten Kommentar bearbeiten? das scheint wertvolle/wichtige Information. – MWiesner