[logback-user] Custom appender
Frank Grimm
grimmfrank at googlemail.com
Tue Jul 13 11:20:53 CEST 2010
Dear mailing list,
I'm trying to use logback (via its slf4j API) in an Eclipe/OSGi
environment. More specifically I'm trying to write a logback appender
that redirects log events to the Eclipse logging mechanism
(org.eclipse.core.runtime.ILog).
So the first thing I did was to create an Eclipse plugin/PDE project for
the custom appender. In the project, the following class was added:
package logback.eclipseappender;
import ch.qos.logback.core.AppenderBase;
public class EclipseAppender extends AppenderBase<Object> {
@Override
protected void append(Object eventObject) {
// TODO
}
}
The a logback configuration that made use of the custom appender was
added to the project, too:
<configuration>
<appender
name="eclipse"
class="eclipseappender.EclipseAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d %p %t %c - %m%n</Pattern>
</layout>
</appender>
<root level="debug">
<appender-ref ref="eclipse"/>
</root>
</configuration>
When the custom appender plugin/bundle is started in a new Eclipse
runtime environment, the appender's class cannot be found (see
stacktrace below).
I've read in another post (DynamicClassLoadingException - How does class
loading in logback works?) that logback might require the logback jar
files and the custom appender jar file to be bundled together. But
bundling them does not make sense in OSGi environments since single
bundles for each of logback's components (core, classic, slf4j API) and
custom appenders should be used.
Is there a way to make logback see the appender class event if it's in
another jar/bundle?
Thanks,
Frank
11:00:58,210 |-INFO in ch.qos.logback.core.joran.action.AppenderAction -
About to instantiate appender of type [eclipseappender.EclipseAppender]
11:00:58,211 |-ERROR in ch.qos.logback.core.joran.action.AppenderAction
- Could not create an Appender of type
[eclipseappender.EclipseAppender].
ch.qos.logback.core.util.DynamicClassLoadingException: Failed to
instantiate type eclipseappender.EclipseAppender
at ch.qos.logback.core.util.DynamicClassLoadingException: Failed to
instantiate type eclipseappender.EclipseAppender
at at
ch.qos.logback.core.util.OptionHelper.instantiateByClassName(OptionHelper.java:53)
[...]
Caused by: java.lang.ClassNotFoundException: eclipseappender.EclipseAppender
at at
org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:506)
at at
org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)
at at
org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
at at
org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
at at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at at
ch.qos.logback.core.util.OptionHelper.instantiateByClassName(OptionHelper.java:45)
at ... 52 common frames omitted
More information about the Logback-user
mailing list