source: proto/pabloj/trunk/src/compiler/logging/PabloJLogger.java @ 2941

Last change on this file since 2941 was 2941, checked in by ksherdy, 5 years ago

Add logger class.

File size: 2.0 KB
Line 
1package compiler.logging;
2
3import java.util.HashMap;
4import java.util.Map;
5import java.util.logging.Level;
6import java.util.logging.Logger;
7
8/** This class is a Facade for java.util.logging.
9 * It also retains the number of messages that have been logged.
10 * Optionally, one may configure this logger to throw an exception
11 * when a certain message count is reached.
12 * <p>
13 * Retains hard references to all loggers created.
14 */ 
15
16public class PabloJLogger {
17        private static Map<String, PabloJLogger> JuncoLoggers = new HashMap<String, PabloJLogger>();
18        private static int numMessages = 0;
19        private static int maxMessagesBeforeQuit = Integer.MAX_VALUE;
20       
21        ////////////////////////////////////////////////////////////////
22        // static interface
23        public static PabloJLogger getLogger(String loggerName) {
24                if(!JuncoLoggers.containsKey(loggerName)) {
25                        JuncoLoggers.put(loggerName, new PabloJLogger(loggerName)); 
26                }
27                return JuncoLoggers.get(loggerName);
28        }
29        public static boolean hasErrors() {
30                return numMessages != 0;
31        }
32        public static void setMaximumErrorMessages(int numMessages) {
33                maxMessagesBeforeQuit = numMessages;
34        }
35       
36        ////////////////////////////////////////////////////////////////
37        // per-instance code
38        private Logger logger;
39        private PabloJLogger(String loggerName) {
40                logger = Logger.getLogger(loggerName);
41        }
42       
43        public void log(Level level, String message) {
44                logger.log(level, message);
45                incrementNumMessages();
46        }
47        public void severe(String message) {
48                log(Level.SEVERE, message);
49        }
50        private void incrementNumMessages() {
51                numMessages++;
52                if(numMessages >= maxMessagesBeforeQuit) {
53                        throw new JuncoLoggerException("Too many error messages.  Aborting.");
54                }
55        }
56       
57        ////////////////////////////////////////////////////////////////
58        // Exception to be thrown
59        public class JuncoLoggerException extends RuntimeException {
60                private static final long serialVersionUID = 1L;
61                public JuncoLoggerException(String string) {
62                        super(string);
63                }
64        }
65}
Note: See TracBrowser for help on using the repository browser.