| /* | |
| * Copyright 2010 Google Inc. | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not | |
| * use this file except in compliance with the License. You may obtain a copy of | |
| * the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | |
| * License for the specific language governing permissions and limitations under | |
| * the License. | |
| */ | |
| package com.google.gwt.logging.impl; | |
| import java.util.ArrayList; | |
| import java.util.List; | |
| import java.util.logging.Handler; | |
| import java.util.logging.Level; | |
| import java.util.logging.LogManager; | |
| import java.util.logging.LogRecord; | |
| import java.util.logging.Logger; | |
| /** | |
| * Implementation for the Logger class when logging is enabled. | |
| */ | |
| public class LoggerImplRegular implements LoggerImpl { | |
| private List<Handler> handlers; | |
| private Level level = null; | |
| private String name; | |
| private Logger parent; // Should never be null except in the RootLogger | |
| private boolean useParentHandlers; | |
| public LoggerImplRegular() { | |
| this.useParentHandlers = true; | |
| handlers = new ArrayList<Handler>(); | |
| } | |
| public void addHandler(Handler handler) { | |
| handlers.add(handler); | |
| } | |
| public void config(String msg) { | |
| log(Level.CONFIG, msg); | |
| } | |
| public void fine(String msg) { | |
| log(Level.FINE, msg); | |
| } | |
| public void finer(String msg) { | |
| log(Level.FINER, msg); | |
| } | |
| public void finest(String msg) { | |
| log(Level.FINEST, msg); | |
| } | |
| public Handler[] getHandlers() { | |
| if (handlers.size() > 0) { | |
| return handlers.toArray(new Handler[handlers.size()]); | |
| } | |
| return null; | |
| } | |
| public Level getLevel() { | |
| if (level != null) { | |
| return level; | |
| } | |
| return getParent().getLevel(); | |
| } | |
| public Logger getLoggerHelper(String name) { | |
| // Ideally, we'd just return LogManager.getLogManager.getOrAddLogger(name) | |
| // here, since the code is basically the same, except that code gets to call | |
| // addLoggerWithoutDuplicationChecking, which makes it somewhat more | |
| // efficient. However, that means adding a public method to LogManager which | |
| // is not in the API which is frowned upon. | |
| LogManager manager = LogManager.getLogManager(); | |
| Logger logger = manager.getLogger(name); | |
| if (logger == null) { | |
| Logger newLogger = new LoggerWithExposedConstructor(name); | |
| manager.addLogger(newLogger); | |
| return newLogger; | |
| } | |
| return logger; | |
| } | |
| public String getName() { | |
| return name; | |
| } | |
| public Logger getParent() { | |
| return parent; | |
| } | |
| public boolean getUseParentHandlers() { | |
| return useParentHandlers; | |
| } | |
| public void info(String msg) { | |
| log(Level.INFO, msg); | |
| } | |
| public boolean isLoggable(Level messageLevel) { | |
| return getLevel().intValue() <= messageLevel.intValue(); | |
| } | |
| public void log(Level level, String msg) { | |
| log(level, msg, null); | |
| } | |
| public void log(Level level, String msg, Throwable thrown) { | |
| if (isLoggable(level)) { | |
| LogRecord record = new LogRecord(level, msg); | |
| record.setThrown(thrown); | |
| record.setLoggerName(getName()); | |
| log(record); | |
| } | |
| } | |
| public void log(LogRecord record) { | |
| if (isLoggable(record.getLevel())) { | |
| for (Handler h : handlers) { | |
| h.publish(record); | |
| } | |
| if (useParentHandlers && parent != null) { | |
| parent.log(record); | |
| } | |
| } | |
| } | |
| public void removeHandler(Handler handler) { | |
| handlers.remove(handler); | |
| } | |
| public void setLevel(Level newLevel) { | |
| level = newLevel; | |
| } | |
| public void setName(String newName) { | |
| name = newName; | |
| } | |
| public void setParent(Logger newParent) { | |
| if (newParent != null) { | |
| parent = newParent; | |
| } | |
| } | |
| public void setUseParentHandlers(boolean newUseParentHandlers) { | |
| useParentHandlers = newUseParentHandlers; | |
| } | |
| public void severe(String msg) { | |
| log(Level.SEVERE, msg); | |
| } | |
| public void warning(String msg) { | |
| log(Level.WARNING, msg); | |
| } | |
| } |