# log4j + JBoss



## Hannes23 (30. Apr 2010)

Hallo zusammen,

ich hätte eine Frage zur Anwendung von log4j unter Benutzung des JBoss: Ich arbeite mit Eclipse und kann log4j in einer kleinen Beispielanwendung problemlos anwenden. Die erzeugten log-messages werden in der log4j.log im Projektverzeichnis in meinem Workspace abgelegt.

Problematischer wird es, wenn ich mit dem JBoss arbeite: Ich erzeuge unter Eclipse per Export eine *.jar-Datei, die ich dann ins deploy-Verzeichnis des JBoss schiebe. Sobald ich diesen starte wird mein Programm problemlos ausgeführt. Wo aber entsteht jetzt meine log4j.log ? Ich hätte sie im deploy-Verzeichnis des JBoss vermutet, da ist sie aber nicht. 

Viele Grüße, Hannes


Umgebung:
-Ubuntu 9.10
-Eclipse IDE for Java EE Developers 1.2.2.20100217-2310 epp.package.jee
-Java 1.6.0
-JBoss 5.0 GA


----------



## FArt (1. Mai 2010)

jboss logging - Google-Suche


----------



## Hannes23 (20. Mai 2010)

mhm..das hat mir leider nicht viel weitergeholfen :-(

Ich hab das Beispiel auf Logging mit Log4j ausprobiert und als "normales Javaprojekt" ohne JBoss macht es genau, was es soll. Die logs werden dann wie hier festgelegt


```
FileAppender fileAppender = new FileAppender( layout, "logs/MeineLogDatei.log", false );
```

in den Unterordner "logs" meines Projekts im Workspace abgelegt. 

Sobald ich diesen Code aber in eine EJB-Anwendung einbaue, die auf einem JBoss läuft, wird weiß ich nicht mehr, wo die *.log - Datei hingeschrieben wird. Im deploy-Verzeichnis des JBoss fand ich wie gesagt nichts ... :-(


----------



## FArt (20. Mai 2010)

Chapter10.Logging Conventions
Logging - JBoss Community

Das deploy-Verzeichnis wäre nicht sinnvoll.


----------



## Hannes23 (20. Mai 2010)

Hallo FArt,

danke für den Link. Ich hab jetzt versucht ein Logging-Beispiel nach den Anweisungen dort zu konstruieren. Leider wird meine Logging-Datei jetzt zwar angelegt, bleibt aber leer.

jboss-log4j.xml  (Teil, den ich hinzugefügt habe)

```
<!-- Appender for Middleware.jar -->
   <appender name="Middlewarelog" class="org.apache.log4j.FileAppender">
      <errorHandler 
           class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
      <param name="Append" value="false"/>
      <param name="File" 
             value="${jboss.server.home.dir}/log/middleware.log"/>
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" 
                value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
      </layout>
      <filter class="org.jboss.logging.filter.TCLFilter">
         <param name="AcceptOnMatch" value="true"/>
         <param name="DeployURL" value="Middleware.jar"/>
      </filter>
   </appender>

   <root>
      <appender-ref ref="CONSOLE"/>
      <appender-ref ref="FILE"/>
      <appender-ref ref="Middlewarelog"/>
   </root>
```


MeineKlasse.java

```
public class MeineKlasse implements Interfaces{
	
   private static Logger logger = Logger.getLogger(MeineKlasse.class.getName());

   public static void main(String[] args) {

		    logger.debug( "Meine Debug-Meldung" );
		    logger.info(  "Meine Info-Meldung"  );
		    logger.warn(  "Meine Warn-Meldung"  );
		    logger.error( "Meine Error-Meldung" );
		    logger.fatal( "Meine Fatal-Meldung" );	
   }
}
```


----------



## FArt (20. Mai 2010)

Das bedeutet, dass kein Logger angesprochen wird, der dem konfigurierten Loglevel entspricht. Das liegt wahrscheinlich daran, dass du eine Klasse mit einer Main-Methode aufrufst, die nicht im JBoss läuft... !?!


----------



## Hannes23 (20. Mai 2010)

Achso, dann liegt der Fehler wahrscheinlich hier:


```
private static Logger logger = Logger.getLogger(MeineKlasse.class.getName());
```

Hier müsste ich wohl den Namen des Appenders aus dem jboss-log4j.xml angeben, statt den Klassennamen (für den es ja keinen gleich lautenden Appender gibt).

Ich hab es dann mit


```
private static Logger logger = Logger.getLogger("Middlewarelog");
```

versucht, das hat aber leider auch nicht geklappt :-(


----------



## Hannes23 (20. Mai 2010)

Oh, entschuldige, ich hab Deinen Text wohl zu ungenau gelesen. Ich wollte mich jetzt vergewissern, dass die angesprochene main() auch wirklich läuft. Dabei bekam ich jetzt beim reinen Starten des JBoss die Meldung


```
log4j:WARN Continuable parsing error 360 and column 23
log4j:WARN The content of element type "log4j:configuration" must match "(renderer*,appender*,(category|logger)*,root?,categoryFactory?)".
```

Der JBoss bleibt dann hier auch stehen. Aber ich kann trotzdem keinen Fehler in meiner jboss-log4j.xml finden (sie ist ja oben abgebildet)...


----------



## FArt (20. Mai 2010)

Die Konfigurationsdatei ist inkonsistent nach dem DTD ...


----------



## Hannes23 (21. Mai 2010)

Was meinst Du mit "DTD"? Und siehst Du an der Konfigurationsdatei etwas, das falsch sein könnte? Mir fällt nichts auf ... :-(


----------



## FArt (21. Mai 2010)

Google und die Doku sind hilfreiche Quellen:
Log4jXmlFormat - Logging-log4j Wiki


----------

