001package com.box.sdk;
002
003import static java.util.logging.Level.ALL;
004import static java.util.logging.Level.FINE;
005import static java.util.logging.Level.INFO;
006import static java.util.logging.Level.OFF;
007import static java.util.logging.Level.SEVERE;
008import static java.util.logging.Level.WARNING;
009
010import java.util.logging.Handler;
011import java.util.logging.Level;
012import java.util.logging.Logger;
013
014/**
015 * Logger class.
016 */
017public final class BoxLogger {
018    private static final BoxLogger DEFAULT_LOGGER = new BoxLogger("com.box.sdk");
019    private final Logger logger;
020
021    private BoxLogger(String name) {
022        logger = Logger.getLogger(name);
023    }
024
025    /**
026     * Get logger instance
027     * @return logger instance.
028     */
029    public static BoxLogger defaultLogger() {
030        return DEFAULT_LOGGER;
031    }
032
033    /**
034     * Log message with level DEBUG {@link Level#FINE}
035     * @param message message to log
036     */
037    public void debug(String message) {
038        logger.fine(message);
039    }
040
041    /**
042     * Log message with level INFO {@link Level#INFO}
043     * @param message message to log
044     */
045    public void info(String message) {
046        logger.info(message);
047    }
048
049    /**
050     * Log message with level WARNING {@link Level#WARNING}
051     * @param message message to log
052     */
053    public void warn(String message) {
054        logger.warning(message);
055    }
056
057    /**
058     * Log message with level WARNING {@link Level#SEVERE}
059     * @param message message to log
060     */
061    public void error(String message) {
062        logger.severe(message);
063    }
064
065    /**
066     * Check if DEBUG level is enabled
067     * @return true if DEBUG level is enabled
068     */
069    public boolean isDebugEnabled() {
070        return logger.isLoggable(FINE);
071    }
072
073    /**
074     * Check if INFO level is enabled
075     * @return true if INFO level is enabled
076     */
077    public boolean isInfoEnabled() {
078        return logger.isLoggable(INFO);
079    }
080
081    /**
082     * Check if WARN level is enabled
083     * @return true if WARN level is enabled
084     */
085    public boolean isWarnEnabled() {
086        return logger.isLoggable(WARNING);
087    }
088
089    /**
090     * Check if ERROR level is enabled
091     * @return true if ERROR level is enabled
092     */
093    public boolean isErrorEnabled() {
094        return logger.isLoggable(SEVERE);
095    }
096
097    /**
098     *  Set logging level to ALL {@link Level#ALL}
099     */
100    public void setLevelToAll() {
101        this.logger.setLevel(ALL);
102    }
103
104    /**
105     *  Reset logging level to default.
106     */
107    public void resetToDefaultLevel() {
108        this.logger.setLevel(null);
109    }
110
111    /**
112     * Set logging level to INFO {@link Level#INFO}
113     */
114    public void setLevelToInfo() {
115        this.logger.setLevel(INFO);
116    }
117
118    /**
119     * Set logging level to WARNING {@link Level#WARNING}
120     */
121    public void setLevelToWarning() {
122        this.logger.setLevel(WARNING);
123    }
124
125    /**
126     * Set logging level to ERROR {@link Level#SEVERE}
127     */
128    public void setLevelToError() {
129        this.logger.setLevel(SEVERE);
130    }
131
132    /**
133     * Turns logging off
134     */
135    public void turnLoggingOff() {
136        this.logger.setLevel(OFF);
137    }
138
139    /**
140     * Specify whether this logger should send its output to its parent Logger. This means that any LogRecords
141     * will also be written to the parent's Handlers, and potentially to its parent, recursively up the namespace.
142     *
143     * @param useParentHandlers true if output is to be sent to the logger's parent.
144     * @throws SecurityException if a security manager exists, this logger is not anonymous,
145     * and the caller does not have LoggingPermission("control").
146     */
147    public void setUseParentHandlers(boolean useParentHandlers) {
148        this.logger.setUseParentHandlers(useParentHandlers);
149    }
150
151    /**
152     * Adds handler to logger.
153     * Check {@link Logger#addHandler(Handler)}
154     * @param handler a logging handler to add.
155     */
156    public void addHandler(Handler handler) {
157        logger.addHandler(handler);
158    }
159
160    /**
161     * Removes handler from logger.
162     * Will not fail if handler is null or not registered.
163     * Check {@link Logger#removeHandler(Handler)}
164     * @param handler a logging handler to remove.
165     */
166    public void removeHandler(Handler handler) {
167        logger.removeHandler(handler);
168    }
169}