# Simple Logging Facade 4 -> NoClassDefFoundError



## kaesebrot (21. Okt 2008)

Hi, 

hat schonmal jemand slf4j in einer RCP-Anwendung verwendet? Ich habe das Problem, das ich folgende Exception bekomme: 

java.lang.NoClassDefFoundError: org/slf4j/spi/LoggerFactoryBinder

Ich habe folgende Plugins mit dem Wizard erstellt. Es werden jeweils alle Packages exportiert. 

org.slf4j.api -> slf4j-api-1.5.5.jar
org.slf4j.log4j12 -> slf4j-log4j12-1.5.5.jar
org.apache.log4j -> log4j-1.2.15.jar

Zum Testen habe ich in die start-Methode der Application-Klasse meines Anwendungs Plugins folgendes geschrieben: 


```
Logger l = LoggerFactory.getLogger(Application.class); 
l.error("TEST");
```

Ich bekomme leider die oben genannte Exception. Ich bin leider an slf4j gebunden bzw. muß es zum Laufen bringen, da ich Apache Mina verwenden möchte. Und dort wird das Logging auch per slf4j gemacht.. 


Ich habe schon alle möglichen Variationen der Abhängigkeitsdefinitionen versucht.. Leider bisher ohne Erfolg. Hat jemand vieleicht einen Tipp wie ich dem Problem Herr werden könnte? 



viele Grüße, 
  Käse


----------



## Wildcard (22. Okt 2008)

Schau mal hier:
http://www.eclipsezone.com/articles/eclipse-vms/


----------



## kaesebrot (22. Okt 2008)

Vielen Dank für den Link. Ich werde Ihn mir gleich zu Gemüte führen. Habe gestern noch eine Zwischenlösung gefunden indem ich die drei Libs in ein Plugin verpackt habe.


----------



## kaesebrot (23. Okt 2008)

Hi, 

danke für den super Artikel. Ich habe mich heute nochmal hingesetzt und die Pluginverknüpfungen überarbeitet. Ziel war, daß alle Plugins nur von slf4j abhängen. Die Applikation soll dann entscheiden, welche Implementierung verwendet werden soll. Ich habe nun folgende Plugins: 

org.slf4j.api -> slf4j-api-1.5.5.jar
org.slf4j.log4j12 -> slf4j-log4j12-1.5.5.jar
org.apache.log4j -> log4j-1.2.15.jar 
some.application
some.plugin


die Abhängigkeiten sind wir folgt definiert: 

org.slf4j.log4j12
-> org.slf4j.api (reexport)
-> org.apache.log4j (reexport)

some.plugin
-> org.slf4j.api

some.application
-> org.slf4j.log4j12


mit dieser Konfiguration bekommt man folgende Exception

java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
at org.slf4j.LoggerFactory.staticInitialize(LoggerFactory.java:83)
at org.slf4j.LoggerFactory.<clinit>(LoggerFactory.java:73)
.....

Die Lösung findet sich letzendlich indem von Wildcard genannten Artikel (hierfür vielen Dank nochmal): http://www.eclipsezone.com/articles/eclipse-vms/

Wenn man sich den Abschnitt "ClassLoaders, Bundles and Buddies" in dem Artikel durchgelesen hat sollte einem die Lösung für das Problem wie schuppen von den Augen fallen  

org.slf4j.log4j12 -> Eclipse-RegisterBuddy: org.slf4j.api
org.slf4j.api -> Eclipse-BuddyPolicy: registered



viele Grüße, 
  Käse


----------



## Wildcard (23. Okt 2008)

genau darauf wollte ich hinaus...
Ich würde mir allerdings überlegen ob du wirklich, wirklich ein Logging Framework einbauen willst, denn ich finde das Eclipse ILog wirklich hervorragend weil sich damit Logging und Anwendungslogik so wunderbar kombinieren lässt.
IStatus brauchst du in Eclipse überall und lässt sich gleichzeitig für die Anwendungslogik und das Logging verwenden.
Ausserdem hast du mit ILog den Vorteil, das alle Fehler auch direkt in der Error Log View erscheinen und du alle Fehler zentral aus der .log von Eclipse ablesen kannst (denn oft passiert ein Fehler in einem Eclipse PlugIn, aber als direkte folge deines Codes. Disposed Exception usw....)


----------



## kaesebrot (23. Okt 2008)

Hi, 

das ist ein sehr guter Tipp. 

Ich bin noch relativ neu in der RCP-Entwicklung. Daher ist mir das Eclipse Logging Framework bisher unbekannt gewesen. Da ein von mir benötigtes Plugin slf4j benötigt, müsste ich hierfür dann eine Implementierung, die auf dem Framework basiert, erstellen. Auf den ersten Blick habe ich da nichts bestehendes gefunden. Wird aber warscheinlich nicht sonderlich schwierig werden.



viele Grüße, 
  Käse


----------

