Skip to content

Commit 220c58d

Browse files
committed
Wait until logback is initialized
1 parent 6b9c2e7 commit 220c58d

File tree

1 file changed

+29
-2
lines changed
  • net.sourceforge.pmd.eclipse.plugin/src/main/java/net/sourceforge/pmd/eclipse/plugin

1 file changed

+29
-2
lines changed

net.sourceforge.pmd.eclipse.plugin/src/main/java/net/sourceforge/pmd/eclipse/plugin/PMDPlugin.java

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import org.eclipse.ui.plugin.AbstractUIPlugin;
5757
import org.osgi.framework.Bundle;
5858
import org.osgi.framework.BundleContext;
59+
import org.slf4j.ILoggerFactory;
5960
import org.slf4j.LoggerFactory;
6061

6162
import 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

Comments
 (0)