source: proto/pabloj/trunk/src/compilers/pabloB/logging/Logger.java @ 2952

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

Restructed PabloJ compile to provide clear separation between PabloS and PabloB.

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