OpenGrokLogger.java revision 639
308N/A/*
308N/A * CDDL HEADER START
308N/A *
308N/A * The contents of this file are subject to the terms of the
308N/A * Common Development and Distribution License (the "License").
308N/A * You may not use this file except in compliance with the License.
308N/A *
308N/A * See LICENSE.txt included in this distribution for the specific
308N/A * language governing permissions and limitations under the License.
308N/A *
308N/A * When distributing Covered Code, include this CDDL HEADER in each
308N/A * file and include the License file at LICENSE.txt.
308N/A * If applicable, add the following below this CDDL HEADER, with the
308N/A * fields enclosed by brackets "[]" replaced with your own identifying
308N/A * information: Portions Copyright [yyyy] [name of copyright owner]
308N/A *
308N/A * CDDL HEADER END
308N/A */
308N/A
308N/A/*
308N/A * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
308N/A * Use is subject to license terms.
308N/A */
308N/Apackage org.opensolaris.opengrok;
308N/A
308N/Aimport java.io.File;
639N/Aimport java.io.IOException;
308N/Aimport java.util.Enumeration;
308N/Aimport java.util.logging.ConsoleHandler;
308N/Aimport java.util.logging.FileHandler;
308N/Aimport java.util.logging.Handler;
308N/Aimport java.util.logging.Level;
308N/Aimport java.util.logging.LogManager;
308N/Aimport java.util.logging.Logger;
308N/A
308N/A/**
308N/A * Util class to set up Logging using the Console and FileLog formatter classes
308N/A *
308N/A * @author Jan S Berg
308N/A */
439N/A@SuppressWarnings({"PMD.MoreThanOneLogger", "PMD.SystemPrintln", "PMD.AvoidThrowingRawExceptionTypes"})
439N/Apublic final class OpenGrokLogger {
363N/A
363N/A private static int LOGFILESIZELIMIT = 1000000;
363N/A private static int LOGFILESCOUNT = 30;
363N/A private final static Logger log = Logger.getLogger("org.opensolaris.opengrok");
639N/A private static Level consoleLevel = Level.WARNING;
639N/A private static Level fileLevel = Level.FINE;
639N/A private static String filepath = "";
639N/A
639N/A public static String getFileLogPath() {
639N/A return filepath;
639N/A }
384N/A
384N/A public static Logger getLogger() {
384N/A return log;
639N/A }
639N/A
639N/A public static void setConsoleLogLevel(Level level) {
639N/A Handler[] handlers = log.getHandlers();
639N/A for (int i = 0; i < handlers.length; i++) {
639N/A Handler h = handlers[i];
639N/A if (h instanceof ConsoleHandler) {
639N/A h.setLevel(level);
639N/A consoleLevel = level;
639N/A }
639N/A }
639N/A }
639N/A
639N/A public static Level getConsoleLogLevel() {
639N/A return consoleLevel;
639N/A }
639N/A
639N/A public static void setFileLogLevel(Level level) {
639N/A Handler[] handlers = log.getHandlers();
639N/A for (int i = 0; i < handlers.length; i++) {
639N/A Handler h = handlers[i];
639N/A if (h instanceof FileHandler) {
639N/A h.setLevel(level);
639N/A fileLevel = level;
639N/A }
639N/A }
639N/A }
639N/A
639N/A public static Level getFileLogLevel() {
639N/A return fileLevel;
639N/A }
308N/A
639N/A public static void setFileLogPath(String path) throws IOException {
639N/A if (path != null) {
639N/A File jlp = new File(path);
639N/A if (!jlp.exists() && !jlp.mkdirs()) {
639N/A throw new IOException("could not make logpath: " +
639N/A jlp.getAbsolutePath());
639N/A }
639N/A }
639N/A
639N/A StringBuffer logfile;
639N/A if (path == null) {
639N/A logfile = new StringBuffer("%t");
639N/A } else {
639N/A logfile = new StringBuffer(path);
639N/A }
639N/A filepath = logfile.toString();
639N/A logfile.append(File.separatorChar).append("opengrok%g.%u.log");
639N/A
639N/A Handler[] handlers = log.getHandlers();
639N/A for (int i = 0; i < handlers.length; i++) {
639N/A Handler h = handlers[i];
639N/A if (h instanceof FileHandler) {
639N/A FileHandler fh = (FileHandler) h;
639N/A try {
639N/A FileHandler nfh = new FileHandler(logfile.toString(),
639N/A LOGFILESIZELIMIT, // size (unlimited)
639N/A LOGFILESCOUNT); // # rotations
639N/A
639N/A nfh.setLevel(fh.getLevel());
639N/A nfh.setFormatter(new FileLogFormatter());
639N/A
639N/A log.addHandler(nfh);
639N/A log.removeHandler(fh);
639N/A //fh.
639N/A } catch (IOException io) {
639N/A }
639N/A }
639N/A }
639N/A }
639N/A
363N/A public static String setupLogger(String logpath, Level filelevel, Level consolelevel) {
384N/A System.out.println("Logging to " + logpath);
439N/A if (logpath != null) {
384N/A File jlp = new File(logpath);
384N/A if (!jlp.exists() && !jlp.mkdirs()) {
384N/A throw new RuntimeException("could not make logpath: " +
384N/A jlp.getAbsolutePath());
384N/A }
384N/A }
363N/A
363N/A clearForeignHandlers();
464N/A StringBuffer logfile;
439N/A if (logpath == null) {
464N/A logfile = new StringBuffer("%t");
464N/A } else {
464N/A logfile = new StringBuffer(logpath);
439N/A }
639N/A filepath = logfile.toString();
465N/A logfile.append(File.separatorChar).append("opengrok%g.%u.log");
363N/A try {
464N/A FileHandler fh = new FileHandler(logfile.toString(),
363N/A LOGFILESIZELIMIT, // size (unlimited)
363N/A LOGFILESCOUNT); // # rotations
363N/A
308N/A fh.setLevel(filelevel);
639N/A fileLevel = filelevel;
308N/A fh.setFormatter(new FileLogFormatter());
363N/A
363N/A log.addHandler(fh);
363N/A
363N/A ConsoleHandler ch = new ConsoleHandler();
363N/A ch.setLevel(consolelevel);
639N/A consoleLevel = consolelevel;
363N/A ch.setFormatter(new ConsoleFormatter());
363N/A log.addHandler(ch);
363N/A
363N/A } catch (Exception ex1) {
363N/A System.err.println("Exception logging " + ex1);
363N/A }
363N/A log.setLevel(filelevel);
363N/A return logpath;
363N/A }
363N/A
363N/A private static void clearForeignHandlers() {
363N/A for (Enumeration e = LogManager.getLogManager().getLoggerNames();
363N/A e.hasMoreElements();) {
363N/A String loggerName = (String) e.nextElement();
363N/A Logger l = Logger.getLogger(loggerName);
363N/A Handler[] h = l.getHandlers();
363N/A if (!loggerName.startsWith("org.opensolaris.opengrok")) {
363N/A for (int i = 0; i < h.length; ++i) {
363N/A l.removeHandler(h[i]);
363N/A }
308N/A }
363N/A h = l.getHandlers();
363N/A }
363N/A }
363N/A
363N/A private OpenGrokLogger() {
363N/A }
308N/A}