001package org.javasimon.utils;
002
003import org.javasimon.Split;
004import org.javasimon.StopwatchSample;
005import org.javasimon.callback.CallbackSkeleton;
006
007import java.util.logging.Level;
008import java.util.logging.Logger;
009
010/**
011 * LoggingCallback logs events via JDK logging API.
012 *
013 * @author <a href="mailto:virgo47@gmail.com">Richard "Virgo" Richter</a>
014 */
015@SuppressWarnings("UnusedDeclaration")
016public class LoggingCallback extends CallbackSkeleton {
017
018        private Logger logger = Logger.getAnonymousLogger();
019        private Level level = Level.FINE;
020
021        /** Logs Simon start on a specified log level. */
022        @Override
023        public void onStopwatchStart(Split split) {
024                logger.log(level, "SIMON START: " + split.getStopwatch());
025        }
026
027        /** Logs Simon stop on a specified log level. */
028        @Override
029        public void onStopwatchStop(Split split, StopwatchSample sample) {
030                logger.log(level, "SIMON STOP: " + sample.simonToString() + " (" + split.runningFor() + ")");
031        }
032
033        /**
034         * Logs the warning on a specified log level.
035         *
036         * @param warning warning message
037         * @param cause throwable cause
038         */
039        @Override
040        public void onManagerWarning(String warning, Exception cause) {
041                logger.log(level, "SIMON WARNING: " + warning, cause);
042        }
043
044        /**
045         * Logs the message on a specified log level.
046         *
047         * @param message message
048         */
049        @Override
050        public void onManagerMessage(String message) {
051                logger.log(level, "SIMON MESSAGE: " + message);
052        }
053
054        /**
055         * Returns logger used to log messages.
056         *
057         * @return used logger
058         */
059        public Logger getLogger() {
060                return logger;
061        }
062
063        /**
064         * Sets the logger that will be used to log messages.
065         *
066         * @param logger new specified logger
067         */
068        public void setLogger(Logger logger) {
069                this.logger = logger;
070        }
071
072        /**
073         * Sets the logger by the name of the logger - used by the configure facility to configure the callback.
074         *
075         * @param logger name of the logger
076         */
077        public void setLogger(String logger) {
078                this.logger = Logger.getLogger(logger);
079        }
080
081        /**
082         * Returns the specified log level for messages.
083         *
084         * @return log level for messages
085         */
086        public Level getLevel() {
087                return level;
088        }
089
090        /**
091         * Sets the level that will be used to log messages.
092         *
093         * @param level log level used to log messages
094         */
095        public void setLevel(Level level) {
096                this.level = level;
097        }
098
099        /**
100         * Sets the level via level name - used by the configure facility to configure the callback.
101         *
102         * @param level name of the level
103         */
104        public void setLevel(String level) {
105                this.level = Level.parse(level);
106        }
107}