I'm using Log4j2 in an Eclipse RCP application. I've been using a RollingFileAppender and am trying to switch to a JDBC appender backed by a ConnectionFactory. I've implemented this using the examples at https://logging.apache.org/log4j/2.x/manual/appenders.html#JDBCAppender as a guide but get a ClassNotFoundException at each call to LogManager.getLogger(). e.g.
2016-11-29 10:23:06,233 main ERROR java.lang.ClassNotFoundException: x.y.z.LogDB java.lang.ClassNotFoundException: x.y.z.LogDB at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:506) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at org.apache.logging.log4j.util.LoaderUtil.loadClass(LoaderUtil.java:141) at org.apache.logging.log4j.core.appender.db.jdbc.FactoryMethodConnectionSource.createConnectionSource(FactoryMethodConnectionSource.java:82) ... My log4j2.xml defines the appender as: <JDBC name="DB" tableName="APP_LOG"> <ConnectionFactory class="x.y.z.LogDB" method="getConnection" /> <Column name="TIMESTAMP" isEventTimestamp="true" /> <Column name="PID" pattern="%X{pid}" /> <Column name="THREAD" pattern="%thread" /> <Column name="USERNAME" pattern="${env:USERNAME}" /> <Column name="SEVERITY" pattern="%level" /> <Column name="LOGGER" pattern="%logger{1.1.1.*}" /> <Column name="MESSAGE" pattern="%message" /> <Column name="EXCEPTION" pattern="%exception" isClob="true" /> </JDBC> I've looked at the obvious things: the name of my factory class matches between my code and config file, it's declared public, and its package is exported by the parent plug-in. (The parent plug-in is also required by other plugins via their manifests.) I can't see why the class loader shouldn't be able to find it. I assume there's something simple and stupid that I'm missing. I'm using Eclipse 3.6.2 (Helios) and Log4j 2.7. -Mike