/src/util/logger/LoggerManager.java
https://github.com/cryptoyoshi/vooga · Java · 313 lines · 106 code · 31 blank · 176 comment · 2 complexity · 963299174eedbd6d3497854e5853b3bd MD5 · raw file
- package util.logger;
- import java.io.OutputStream;
- import java.util.logging.Handler;
- import java.util.logging.Level;
- import java.util.logging.LogRecord;
- import java.util.logging.Logger;
- /**
- * A class that handles a logger.
- * This class does not propagate LogRecords to parent Loggers, so if the
- * user wants to set parents or even more complex instructions, he/she
- * should call getLogger() to do so.
- * It sets a console handler as a default handler.
- *
- * By default, the logger starts at ALL level so any type of message is logged.
- *
- * Note that the user does not need to use any other class in this package
- * except this one to manage the logger
- *
- * @author Henrique Moraes
- */
- public class LoggerManager {
- /**
- * This logger serves as a quick reference in case the user
- * wants to log a message in one line of code
- * The logger used was initialized with this class' name
- */
- public static final Logger DEFAULT_LOGGER =
- Logger.getLogger(LoggerManager.class.getName());
- private static final String LOG_EXT = ".log";
- public static final String DEFAULT_FILE_NAME = "Logger";
- private Logger myLogger;
- private IVoogaHandler myDefaultHandler = new HandlerConsole();
- private Level myDefaultLevel = Level.ALL;
- /**
- * Constructor
- * Sets a logger using reflection to find the name of the calling class
- * The Logger is initialized with the name of the calling class
- * By default, a console handler is set
- */
- public LoggerManager () {
- initializeLogger(LoggerReflection.getCallerClassName());
- }
- /**
- * Constructor.
- * Sets a logger according to the given class name
- */
- public LoggerManager (String loggerName) {
- initializeLogger(loggerName);
- }
- /**
- * Initializes a logger with default parameters of this manager
- *
- * @param loggerName Name of the logger to initialize
- */
- private void initializeLogger (String loggerName) {
- myLogger = Logger.getLogger(loggerName);
- myLogger.setUseParentHandlers(false);
- myLogger.setLevel(myDefaultLevel);
- addHandler(myDefaultHandler);
- }
- /**
- * Adds a handler to the logger and sets it to the logger level
- * All add handler methods eventually pass through this method
- * Can be used to set customized handlers for the logger in case
- * the user wants to extend the design
- *
- * @param handlerType the type of handler to be added
- */
- public void addHandler (IVoogaHandler hand) {
- Handler handler = hand.getHandler();
- handler.setLevel(myLogger.getLevel());
- myLogger.addHandler(handler);
- }
- /**
- * Adds a memory handler to the logger depending on given handler and
- * constraints. A memory handler pushes all log records after a message of
- * the specified threshold level is logged
- * This API was designed to be able to combine any other handler to the
- * memoryHandler
- * WARNING the type of handler added will have level INFO.
- * Once it is set, its level cannot be changed. If the user wishes to set
- * the handler from memory, he should set it manually and call the regular
- * addHandler()
- *
- * @param handler the type of handler to have records pushed to
- * @param size Number of maximum records this handler will maintain
- * @param pushLevel push to handler as soon as a message of the given
- * level is issued
- */
- public void addMemoryHandler (IVoogaHandler handler, int size, Level pushLevel) {
- addHandler(new HandlerMemory(handler, size, pushLevel));
- }
- /**
- * Adds a memory handler to the logger depending on given handler and
- * constraints. A memory handler pushes all log records after a message of
- * the specified threshold level is logged
- * This API was designed to be able to combine any other handler to the
- * memoryHandler
- * WARNING the type of handler added will have level INFO.
- * Once it is set, its level cannot be changed. If the user wishes to set
- * the handler from memory, he should set it manually and call the regular
- * addHandler()
- *
- * @param handler the type of handler to have records pushed to
- */
- public void addMemoryHandler (IVoogaHandler handler) {
- HandlerMemory memory = new HandlerMemory();
- memory.setHandler(handler);
- addHandler(memory);
- }
- /**
- *
- * Adds a handler that sends log records to the Console
- */
- public void addConsoleHandler () {
- addHandler(new HandlerConsole());
- }
- /**
- *
- * Adds a handler that records messages in a txt file with a
- * default file name
- */
- public void addTxtHandler () {
- addHandler(new HandlerTxt());
- }
- /**
- *
- * Adds a handler that records messages in a txt file
- *
- * @param fileName Name of the file to have records written to
- */
- public void addTxtHandler (String fileName) {
- addHandler(new HandlerTxt(fileName));
- }
- /**
- *
- * Adds a handler that records messages in a file with user-defined extension
- *
- * @param fileName Name of the file to have records written to
- * @param ext The extension of the file
- */
- public void addCustomExtensionFileHandler (String fileName, String ext) {
- addHandler(new HandlerTxt(fileName, ext));
- }
- /**
- *
- * Adds a handler that records messages in a .log file
- *
- * @param fileName Name of the file to have records written to
- */
- public void addLogHandler (String fileName) {
- addCustomExtensionFileHandler(fileName, LOG_EXT);
- }
- /**
- *
- * Adds a handler that records messages in an XML file
- *
- * @param fileName Name of the file to have records written to
- */
- public void addXMLHandler (String fileName) {
- addHandler(new HandlerXML(fileName));
- }
- /**
- *
- * Adds a handler that records messages in an XML file
- */
- public void addXMLHandler () {
- addHandler(new HandlerXML());
- }
- /**
- *
- * Adds a handler that sends log records across a given stream
- *
- * @param out Outputstream that this handler should write to
- */
- public void addStreamHandler (OutputStream out) {
- addHandler(new HandlerStream(out));
- }
- /**
- *
- * Adds a handler that sends log records across a given stream
- * If no stream is given, the manager chooses System.out by default
- */
- public void addStreamHandler () {
- addHandler(new HandlerStream());
- }
- /**
- *
- * Adds a handler that sends log records through a given socket
- *
- * @param host string with the name of the host of this connection
- * @param port number of the port to be used
- */
- public void addSocketHandler (String host, int port) {
- addHandler(new HandlerSocket(host, port));
- }
- /**
- *
- * Adds a handler that sends log records via e-mail
- *
- * @param from Address from which the e-mail is sent
- * @param to String array with recipients to send e-mail to
- * @param server Server address
- * @param subject Subject of e-mail
- * @param message Text in e-mail
- */
- public void addMailHandler (String from, String[] to,
- String server, String subject, String message) {
- addHandler(new HandlerMail(from, to, server, subject, message));
- }
- /**
- * Sets the level of the logger and all its handlers
- *
- * @param level
- */
- public void setLevel (Level level) {
- myLogger.setLevel(level);
- for (Handler h : myLogger.getHandlers()) {
- h.setLevel(level);
- }
- }
- /**
- * Logs a message on the logger of this manager
- *
- * @param level the level of the LogRecord
- * @param message The message to log
- */
- public void log (Level level, String message) {
- LogRecord record = new LogRecord(level, message);
- record.setSourceClassName(LoggerReflection.getCallerClassName());
- record.setSourceMethodName(LoggerReflection.getCallerMethodName());
- myLogger.log(record);
- }
- /**
- * Logs a FINER level message on the logger of this manager
- *
- * @param message The message to log
- */
- public void finer (String message) {
- log(Level.FINER, message);
- }
- /**
- * Logs a INFO level message on the logger of this manager
- *
- * @param message The message to log
- */
- public void info (String message) {
- log(Level.INFO, message);
- }
- /**
- * Logs a WARNING level message on the logger of this manager
- *
- * @param message The message to log
- */
- public void warning (String message) {
- log(Level.WARNING, message);
- }
- /**
- * Logs a SEVERE level message on the logger of this manager
- *
- * @param message The message to log
- */
- public void severe (String message) {
- log(Level.SEVERE, message);
- }
- /**
- * Gets the logger of this manager in case the user wants to
- * handle it for more complex instructions
- * @return The logger associated with this Manager
- */
- public Logger getLogger () {
- return myLogger;
- }
- /**
- * Removes all handlers from the current logger of this manager
- */
- public void clearHandlers () {
- for (Handler h : myLogger.getHandlers()) {
- myLogger.removeHandler(h);
- }
- }
- }