1515import java .util .Map ;
1616import java .util .Set ;
1717
18- import org .apache .log4j .ConsoleAppender ;
19- import org .apache .log4j .Layout ;
20- import org .apache .log4j .Level ;
2118import org .apache .log4j .Logger ;
22- import org .apache .log4j .PatternLayout ;
23- import org .apache .log4j .RollingFileAppender ;
2419import org .eclipse .core .resources .IFile ;
2520import org .eclipse .core .resources .IFolder ;
2621import org .eclipse .core .resources .IProject ;
5651import org .eclipse .ui .plugin .AbstractUIPlugin ;
5752import org .osgi .framework .Bundle ;
5853import org .osgi .framework .BundleContext ;
59- import org .slf4j .ILoggerFactory ;
6054import org .slf4j .LoggerFactory ;
6155
6256import net .sourceforge .pmd .PMDConfiguration ;
6660import net .sourceforge .pmd .eclipse .core .IRuleSetManager ;
6761import net .sourceforge .pmd .eclipse .core .ext .RuleSetsExtensionProcessor ;
6862import net .sourceforge .pmd .eclipse .core .impl .RuleSetManagerImpl ;
69- import net .sourceforge .pmd .eclipse .logging .internal .EclipseLogAppender ;
63+ import net .sourceforge .pmd .eclipse .logging .internal .LogbackConfiguration ;
7064import net .sourceforge .pmd .eclipse .runtime .cmd .JavaProjectClassLoader ;
7165import net .sourceforge .pmd .eclipse .runtime .preferences .IPreferences ;
7266import net .sourceforge .pmd .eclipse .runtime .preferences .IPreferencesFactory ;
9185import net .sourceforge .pmd .lang .LanguageVersion ;
9286import net .sourceforge .pmd .lang .java .JavaLanguageModule ;
9387
94- import ch .qos .logback .classic .LoggerContext ;
95-
9688/**
9789 * The activator class controls the plug-in life cycle
9890 */
@@ -123,14 +115,14 @@ public class PMDPlugin extends AbstractUIPlugin {
123115
124116 private StringTable stringTable ; // NOPMD by Herlin on 11/10/06 00:22
125117
126- public static final String ROOT_LOG_ID = "net.sourceforge.pmd" ;
127- private static final String PMD_ECLIPSE_APPENDER_NAME = "PMDEclipseAppender" ;
118+ @ Deprecated
119+ public static final String ROOT_LOG_ID = LogbackConfiguration . ROOT_LOG_ID ;
128120 private IPreferencesFactory preferencesFactory = new PreferencesFactoryImpl ();
129121 private IPropertiesFactory propertiesFactory = new PropertiesFactoryImpl ();
130122
131123 private final IRuleSetManager ruleSetManager = new RuleSetManagerImpl (); // NOPMD:SingularField
132124
133- private EclipseLogAppender logbackEclipseAppender ;
125+ private final LogbackConfiguration logbackConfiguration = new LogbackConfiguration () ;
134126
135127 /**
136128 * The constructor
@@ -242,15 +234,15 @@ public static File getPluginFolder() {
242234 */
243235 public void start (BundleContext context ) throws Exception {
244236 super .start (context );
245- configureLogback ();
237+ logbackConfiguration . configureLogback ();
246238
247239 // this needs to be executed before the preferences are loaded, because
248240 // the standard
249241 // rulesets are needed for the default active rules.
250242 registerStandardRuleSets ();
251243
252244 IPreferences prefs = loadPreferences ();
253- configureLogs (prefs );
245+ logbackConfiguration . applyLogPreferences (prefs . getLogFileName (), prefs . getLogLevel (). toString () );
254246 registerAdditionalRuleSets ();
255247 fileChangeListenerEnabled (prefs .isCheckAfterSaveEnabled ());
256248
@@ -271,57 +263,6 @@ public void resourceChanged(IResourceChangeEvent arg0) {
271263 LOGGER .debug ("PMD Plugin {} has started..." , version );
272264 }
273265
274- private void configureLogback () {
275- unconfigureLogback ();
276- LoggerContext logbackContext = getLogbackContext ();
277- if (logbackContext == null ) {
278- return ;
279- }
280-
281- logbackEclipseAppender = new EclipseLogAppender (PLUGIN_ID , getLog ());
282- logbackEclipseAppender .setContext (logbackContext );
283- logbackEclipseAppender .setName (PLUGIN_ID );
284- logbackEclipseAppender .start ();
285-
286- ch .qos .logback .classic .Logger l = logbackContext .getLogger ("net.sourceforge.pmd" );
287- l .addAppender (logbackEclipseAppender );
288- }
289-
290- private void unconfigureLogback () {
291- if (logbackEclipseAppender == null ) {
292- return ;
293- }
294-
295- LoggerContext logbackContext = getLogbackContext ();
296- if (logbackContext == null ) {
297- return ;
298- }
299-
300- ch .qos .logback .classic .Logger l = logbackContext .getLogger ("net.sourceforge.pmd" );
301- l .detachAppender (logbackEclipseAppender );
302- logbackEclipseAppender .stop ();
303- logbackEclipseAppender = null ;
304- }
305-
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-
325266 /**
326267 * Get a list of all the files that are open in eclipse currently
327268 *
@@ -441,7 +382,7 @@ public void stop(BundleContext context) throws Exception {
441382 ShapePainter .disposeAll ();
442383 ResourceManager .dispose ();
443384 PriorityDescriptorCache .INSTANCE .dispose ();
444- unconfigureLogback ();
385+ logbackConfiguration . unconfigureLogback ();
445386 super .stop (context );
446387 }
447388
@@ -611,45 +552,8 @@ public IRuleSetWriter getRuleSetWriter() {
611552 return new WriterFactoryImpl ().getRuleSetWriter ();
612553 }
613554
614- /**
615- * Apply the log preferences
616- */
617555 public void applyLogPreferences (IPreferences preferences ) {
618- Logger log = Logger .getLogger (ROOT_LOG_ID );
619- log .setLevel (preferences .getLogLevel ());
620- RollingFileAppender appender = (RollingFileAppender ) log .getAppender (PMD_ECLIPSE_APPENDER_NAME );
621- if (appender == null ) {
622- configureLogs (preferences );
623- } else if (!appender .getFile ().equals (preferences .getLogFileName ())) {
624- appender .setFile (preferences .getLogFileName ());
625- appender .activateOptions ();
626- }
627- }
628-
629- /**
630- * Configure the logging
631- *
632- */
633- private void configureLogs (IPreferences preferences ) {
634- try {
635- Layout layout = new PatternLayout ("%d{yyyy/MM/dd HH:mm:ss,SSS} %-5p %-32c{1} %m%n" );
636-
637- RollingFileAppender appender = new RollingFileAppender (layout , preferences .getLogFileName ());
638- appender .setName (PMD_ECLIPSE_APPENDER_NAME );
639- appender .setMaxBackupIndex (1 );
640- appender .setMaxFileSize ("10MB" );
641-
642- Logger .getRootLogger ().addAppender (new ConsoleAppender (layout ));
643- Logger .getRootLogger ().setLevel (Level .WARN );
644- Logger .getRootLogger ().setAdditivity (false );
645-
646- Logger .getLogger (ROOT_LOG_ID ).addAppender (appender );
647- Logger .getLogger (ROOT_LOG_ID ).setLevel (preferences .getLogLevel ());
648- Logger .getLogger (ROOT_LOG_ID ).setAdditivity (false );
649-
650- } catch (IOException e ) {
651- logError ("IO Exception when configuring logging." , e );
652- }
556+ logbackConfiguration .applyLogPreferences (preferences .getLogFileName (), preferences .getLogLevel ().toString ());
653557 }
654558
655559 /**
0 commit comments