All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jruby.util.log.JULLogger Maven / Gradle / Ivy

/***** BEGIN LICENSE BLOCK *****
 * Version: EPL 2.0/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Eclipse Public
 * 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.eclipse.org/legal/epl-v20.html
 *
 * Software distributed under the License is distributed on an "AS
 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * rights and limitations under the License.
 *
 * Copyright (C) 2015-2015 The JRuby Community (and contribs)
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either of the GNU General Public License Version 2 or later (the "GPL"),
 * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the EPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the EPL, the GPL or the LGPL.
 ***** END LICENSE BLOCK *****/

package org.jruby.util.log;

import java.util.logging.Level;

/**
 * Logger which delegates to {@link java.util.logging.Logger}.
 *
 * @author kares
 */
public class JULLogger implements Logger {

    private final java.util.logging.Logger logger; // our delegate

    public JULLogger(final String loggerName) {
        this( java.util.logging.Logger.getLogger(loggerName) );
    }

    public JULLogger(final Class loggerClass) {
        this( java.util.logging.Logger.getLogger(loggerClass.getName()) );
    }

    protected JULLogger(final java.util.logging.Logger logger) {
        this.logger = logger;
    }

    public String getName() {
        return logger.getName();
    }

    public void warn(String message, Object... args) {
        log(Level.WARNING, adjustPattern(message), args);
    }

    public void warn(Throwable throwable) {
        log(Level.WARNING, null, throwable);
    }

    public void warn(String message, Throwable throwable) {
        log(Level.WARNING, message, throwable);
    }

    public void error(String message, Object... args) {
        log(Level.SEVERE, adjustPattern(message), args);
    }

    public void error(Throwable throwable) {
        log(Level.SEVERE, null, throwable);
    }

    public void error(String message, Throwable throwable) {
        log(Level.SEVERE, message, throwable);
    }

    public void info(String message, Object... args) {
        if (logger.isLoggable(Level.INFO)) {
            log(Level.INFO, adjustPattern(message), args);
        }
    }

    public void info(Throwable throwable) {
        log(Level.INFO, null, throwable);
    }

    public void info(String message, Throwable throwable) {
        log(Level.INFO, message, throwable);
    }

    public void debug(String message, Object... args) {
        if (logger.isLoggable(Level.FINE)) {
            log(Level.FINE, adjustPattern(message), args);
        }
    }

    public void debug(Throwable throwable) {
        log(Level.FINE, null, throwable);
    }

    public void debug(String message, Throwable throwable) {
        log(Level.FINE, message, throwable);
    }


    protected void log(Level level, String message, Object... args) {
        final String souceClass = null;
        final String souceMethod = null;
        logger.logp(level, souceClass, souceMethod, message, args);
    }

    protected void log(Level level, String message, Throwable ex) {
        final String souceClass = null;
        final String souceMethod = null;
        logger.logp(level, souceClass, souceMethod, message, ex);
    }

    public boolean isDebugEnabled() {
        return logger.isLoggable(Level.FINE);
    }

    public void setDebugEnable(boolean debug) {
        logger.setLevel(debug ? Level.FINE : Level.INFO);
    }

    // adjust {} to JUL conventions e.g. "hello {} {}" -> "hello {0} {1}"
    static String adjustPattern(final String messagePattern) {
        if (messagePattern == null) return null;

        StringBuilder julPattern = null;
        final int len = messagePattern.length(); int last = 0; int counter = 0;
        for ( int i = 0; i < len; i++ ) {
            if ( messagePattern.charAt(i) == '{' &&
                ( i == 0 || (i > 0 && messagePattern.charAt(i - 1) != '\\' ) ) &&
                ( i < len - 1 && messagePattern.charAt(i + 1) == '}' ) ) {
                if (julPattern == null) {
                    julPattern = new StringBuilder(len + 8);
                }
                julPattern.
                    append(messagePattern, last, i).
                    append('{').append(counter++).append('}');
                last = i + 2;
            }
        }

        if (julPattern != null) {
            if (last < len) {
                julPattern.append(messagePattern, last, len);
            }
            return julPattern.toString();
        }

        return messagePattern; // no {} place holders
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy