/* * The contents of this file are subject to the terms of the Common Development and * Distribution License (the License). You may not use this file except in compliance with the * License. * * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the * specific language governing permission and limitations under the License. * * When distributing Covered Software, include this CDDL Header Notice in each file and include * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL * Header, with the fields enclosed by brackets [] replaced by your own identifying * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2014-2015 ForgeRock AS. */ package org.opends.server.loggers; import java.util.logging.ErrorManager; import java.util.logging.Formatter; 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; import java.util.logging.SimpleFormatter; /** * Utility class for java.util.logging support. */ public class JDKLogging { /** Root packages that contains all OpenDJ related classes. */ private static final String[] LOGGING_ROOTS = new String[] { "org.opends", "org.forgerock.opendj"}; /** * Disable java.util.logging. */ public static void disableLogging() { LogManager.getLogManager().reset(); Logger.getLogger("").setLevel(Level.OFF); } /** * Enable JDK logging to stderr at provided level for OpenDJ classes. * * @param level * The level to log. */ public static void enableConsoleLoggingForOpenDJ(Level level) { LogManager.getLogManager().reset(); Handler handler = new OpenDJHandler(); handler.setFormatter(getFormatter()); handler.setLevel(level); for (String loggingRoot : LOGGING_ROOTS) { Logger logger = Logger.getLogger(loggingRoot); logger.setLevel(level); logger.addHandler(handler); } } /** * Custom handler to log to either stdout or stderr depending on the log level */ private static final class OpenDJHandler extends Handler { @Override public void publish(LogRecord record) { if (getFormatter() == null) { setFormatter(new SimpleFormatter()); } try { String message = getFormatter().format(record); if (record.getLevel().intValue() >= Level.WARNING.intValue()) { System.err.write(message.getBytes()); } else { System.out.write(message.getBytes()); } } catch (Exception exception) { reportError(null, exception, ErrorManager.FORMAT_FAILURE); return; } } @Override public void close() throws SecurityException { } @Override public void flush() { System.out.flush(); System.err.flush(); } } /** * Get a formatter. * * @return a formatter for loggers */ public static Formatter getFormatter() { return new JDKLoggingFormater(); } /** * Returns the packages to be used as root for logging. *

* This package covers all OpenDJ classes. * * @return the root packages to log */ public static String[] getOpendDJLoggingRoots() { return LOGGING_ROOTS; } }