2017-05-03 1 views
1

Ich versuche den log4j2 LogManager in einer Eclipse-RCP-Anwendung zu verwenden. Ich habeWie man org.apache.logging.log4j.jul.LogManager in einer eclipse-rcp Anwendung benutzt?

-Djava.util.logging.manager = org.apache.logging.log4j.jul.LogManager

Satz als Startparameter. Starten der RCP-Anwendung aus meiner Eclipse-IDE funktioniert alles wie erwartet. Aber sobald ich es als eigenständige Anwendung starte, funktioniert die Protokollierung nicht.

Ein möglicher Hinweis kann die folgende Stacktrace von der Client-Konsole sein:

Could not load Logmanager "org.apache.logging.log4j.jul.LogManager" 
java.lang.ClassNotFoundException: org.apache.logging.log4j.jul.LogManager 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at org.eclipse.core.runtime.internal.adaptor.ContextFinder.loadClass(ContextFinder.java:131) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at java.util.logging.LogManager$1.run(Unknown Source) 
     at java.util.logging.LogManager$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.util.logging.LogManager.<clinit>(Unknown Source) 
     at java.util.logging.Logger.demandLogger(Unknown Source) 
     at java.util.logging.Logger.getLogger(Unknown Source) 
     at org.apache.felix.gogo.runtime.threadio.ThreadIOImpl.<clinit>(ThreadIOImpl.java:30) 
     at org.apache.felix.gogo.runtime.activator.Activator.start(Activator.java:75) 
     at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) 
     at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) 
     at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) 
     at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300) 
     at org.eclipse.equinox.console.command.adapter.Activator.startBundle(Activator.java:248) 
     at org.eclipse.equinox.console.command.adapter.Activator.start(Activator.java:237) 
     at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) 
     at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) 
     at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) 
     at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300) 
     at org.eclipse.osgi.framework.internal.core.ConsoleManager.checkForConsoleBundle(ConsoleManager.java:215) 
     at org.eclipse.core.runtime.adaptor.EclipseStarter.startup(EclipseStarter.java:297) 
     at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
     at java.lang.reflect.Method.invoke(Unknown Source) 
     at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629) 
     at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584) 
     at org.eclipse.equinox.launcher.Main.run(Main.java:1438) 

Was muss ich in der RCP-Anwendung zu erhalten tun Anmeldung läuft, ohne es aus meiner IDE zu starten?

Antwort

0

Es klingt wie Eclipse Ihrer Abhängigkeit von dieser Klasse bewusst ist und in der Lage ist, es für Sie zum Klassenpfad hinzuzufügen. Was Sie benötigen, ist eine Möglichkeit, die Abhängigkeit zum Klassenpfad hinzuzufügen, wenn Sie sie außerhalb von Eclipse ausführen. Um dies zu beheben, stellen Sie sicher, dass die Klasse org.apache.logging.log4j.jul.LogManager im Klassenpfad ist. Dies kann mit -cp und dem Pfad zur JAR-Datei erfolgen. Zum Beispiel, wenn Sie eine Klasse com.org.Main haben, die Sie versuchen zu laufen.

java -cp your.jar:log4j-jul-2.3.jar com.org.Main 

your.jar ist das Glas Ihre Anwendung und log4j-jul-2.3.jar wird das Gefäß mit der fehlenden Klasse enthält.