ScopedLogHandlersManager.java
01 /**
02  * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
03  */
04 package net.sourceforge.pmd.util.log;
05 
06 import java.util.logging.Handler;
07 import java.util.logging.Level;
08 import java.util.logging.Logger;
09 
10 /**
11  *  @author Romain PELISSE, belaran@gmail.com
12  *  @author Roberto Ferranti - rferranti@users.sourceforge.net
13  *  Thanks to Jesse Glick for the bug report.
14  *
15  */
16 public class ScopedLogHandlersManager {
17 
18   private static final String PACKAGE_NAME = "net.sourceforge.pmd";
19 
20     @SuppressWarnings("PMD.LoggerIsNotStaticFinal")
21     private Logger logger;
22     private Level oldLogLevel;
23     private Handler[] oldHandlers;
24     private Handler[] newHandlers;
25 
26     public ScopedLogHandlersManager(Level level, Handler... handlers) {
27         newHandlers = handlers;
28         logger = Logger.getLogger(PACKAGE_NAME);
29         oldHandlers = logger.getHandlers();
30         oldLogLevel = logger.getLevel();
31         logger.setLevel(level);
32         //The Ant logger filters itself
33         for (Handler handler : oldHandlers) {
34             logger.removeHandler(handler);
35         }
36         for (Handler handler : newHandlers) {
37             logger.addHandler(handler);
38         }
39     }
40 
41     public void close() {
42         for (Handler handler : newHandlers) {
43             logger.removeHandler(handler);
44         }
45         for (Handler handler : oldHandlers) {
46             logger.addHandler(handler);
47         }
48         logger.setLevel(oldLogLevel);
49     }
50 }