5656import org .eclipse .ui .plugin .AbstractUIPlugin ;
5757import org .osgi .framework .Bundle ;
5858import org .osgi .framework .BundleContext ;
59+ import org .slf4j .ILoggerFactory ;
5960import org .slf4j .LoggerFactory ;
6061
6162import net .sourceforge .pmd .PMDConfiguration ;
@@ -272,8 +273,11 @@ public void resourceChanged(IResourceChangeEvent arg0) {
272273
273274 private void configureLogback () {
274275 unconfigureLogback ();
276+ LoggerContext logbackContext = getLogbackContext ();
277+ if (logbackContext == null ) {
278+ return ;
279+ }
275280
276- LoggerContext logbackContext = (LoggerContext ) LoggerFactory .getILoggerFactory ();
277281 logbackEclipseAppender = new EclipseLogAppender (PLUGIN_ID , getLog ());
278282 logbackEclipseAppender .setContext (logbackContext );
279283 logbackEclipseAppender .setName (PLUGIN_ID );
@@ -288,13 +292,36 @@ private void unconfigureLogback() {
288292 return ;
289293 }
290294
291- LoggerContext logbackContext = (LoggerContext ) LoggerFactory .getILoggerFactory ();
295+ LoggerContext logbackContext = getLogbackContext ();
296+ if (logbackContext == null ) {
297+ return ;
298+ }
299+
292300 ch .qos .logback .classic .Logger l = logbackContext .getLogger ("net.sourceforge.pmd" );
293301 l .detachAppender (logbackEclipseAppender );
294302 logbackEclipseAppender .stop ();
295303 logbackEclipseAppender = null ;
296304 }
297305
306+ private LoggerContext getLogbackContext () {
307+ ILoggerFactory loggerFactory = LoggerFactory .getILoggerFactory ();
308+ int maxTries = 10 ;
309+ while (!(loggerFactory instanceof LoggerContext ) && maxTries > 0 ) {
310+ try {
311+ Thread .sleep (100 );
312+ } catch (InterruptedException e ) {
313+ Thread .currentThread ().interrupt ();
314+ return null ;
315+ }
316+ maxTries --;
317+ loggerFactory = LoggerFactory .getILoggerFactory ();
318+ }
319+ if (loggerFactory instanceof LoggerContext ) {
320+ return (LoggerContext ) loggerFactory ;
321+ }
322+ return null ;
323+ }
324+
298325 /**
299326 * Get a list of all the files that are open in eclipse currently
300327 *
0 commit comments