
logback.xml not found when initialized by java agent ---------------------------------------------------- Key: LBCLASSIC-297 URL: http://jira.qos.ch/browse/LBCLASSIC-297 Project: logback-classic Issue Type: Bug Affects Versions: 0.9.31 Reporter: subes Assignee: Logback dev list datanucleus-enhancer is a java agent that manipulates java classes during jvm startup. It uses a Log4J binding, which is implemented by slf4j and delegated to logback. datanucleus-enhacer spams the console with unnecessary debug statements while it does its work: 21:29:25.369 [main] DEBUG DataNucleus.ClassLoading - Class "org.eclipse.core.runtime.RegistryFactory" was not found in the CLASSPATH [Class resolver called from org.datanucleus.plugin.PluginRegistryFactory.newInstance (line=91)] 21:29:25.374 [main] DEBUG DataNucleus.Plugin - Plugin Registry "org.datanucleus.plugin.EclipsePluginRegistry" not found. Falling back to DataNucleus registry. Reason : Class "org.eclipse.core.runtime.RegistryFactory" was not found in the CLASSPATH. Please check your specification and your CLASSPATH.. 21:29:25.375 [main] DEBUG DataNucleus.Plugin - Using PluginRegistry org.datanucleus.plugin.NonManagedPluginRegistry 21:29:25.399 [main] DEBUG DataNucleus.ClassLoading - Class "org.eclipse.core.runtime.RegistryFactory" was not found in the CLASSPATH [Class resolver called from org.datanucleus.plugin.PluginRegistryFactory.newInstance (line=91)] 21:29:25.400 [main] DEBUG DataNucleus.Plugin - Plugin Registry "org.datanucleus.plugin.EclipsePluginRegistry" not found. Falling back to DataNucleus registry. Reason : Class "org.eclipse.core.runtime.RegistryFactory" was not found in the CLASSPATH. Please check your specification and your CLASSPATH.. 21:29:25.400 [main] DEBUG DataNucleus.Plugin - Using PluginRegistry org.datanucleus.plugin.NonManagedPluginRegistry ... -------------------------------------------------------------------------------------------------------- That is because logback does not find my logback.xml on the classpath: <configuration> <appender name="console" class="de.invesdwin.gemeinsam.log.logback.ConfiguredConsoleAppender"> <Target>System.err</Target> </appender> <root level="WARN"> <appender-ref ref="console" /> </root> </configuration> -------------------------------------------------------------------------------------------------------- This is caused by ContextInitializer.getResource() using the wrong classloader during java agent process: sun.misc.Launcher$AppClassLoader@28df6ccd which cannot resolve the classpath name: logback.xml to fix this, logback should fallback to the system classloader if the resource was not found with the specific classloader. To do this, we have to change: ------------------- private URL getResource(String filename, ClassLoader myClassLoader, boolean updateStatus) { URL url = Loader.getResource(filename, myClassLoader); if (updateStatus) { statusOnResourceSearch(filename, myClassLoader, url); } return url; } ------------------- to: ------------------- private URL getResource(String filename, ClassLoader myClassLoader, boolean updateStatus) { URL url = Loader.getResource(filename, myClassLoader); if(url == null){ url = Loader.getResource(filename, ClassLoader.getSystemClassLoader()); } if (updateStatus) { statusOnResourceSearch(filename, myClassLoader, url); } return url; } to properly initialize logback during javaagent execution. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.qos.ch/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira