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

hudson.logging.WeakLogHandler Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 *
 * Copyright (c) 2004-2009 Oracle Corporation.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 * 
*    Kohsuke Kawaguchi
 *
 *
 *******************************************************************************/ 

package hudson.logging;

import java.io.UnsupportedEncodingException;
import java.lang.ref.WeakReference;
import java.util.logging.ErrorManager;
import java.util.logging.Filter;
import java.util.logging.Formatter;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;

/**
 * Delegating {@link Handler} that uses {@link WeakReference}, which
 * de-registers itself when an object disappears via GC.
 */
public final class WeakLogHandler extends Handler {

    private final WeakReference target;
    private final Logger logger;

    public WeakLogHandler(Handler target, Logger logger) {
        this.logger = logger;
        logger.addHandler(this);
        this.target = new WeakReference(target);
    }

    public void publish(LogRecord record) {
        Handler t = resolve();
        if (t != null) {
            t.publish(record);
        }
    }

    public void flush() {
        Handler t = resolve();
        if (t != null) {
            t.flush();
        }
    }

    public void close() throws SecurityException {
        Handler t = resolve();
        if (t != null) {
            t.close();
        }
    }

    private Handler resolve() {
        Handler r = target.get();
        if (r == null) {
            logger.removeHandler(this);
        }
        return r;
    }

    @Override
    public void setFormatter(Formatter newFormatter) throws SecurityException {
        super.setFormatter(newFormatter);
        Handler t = resolve();
        if (t != null) {
            t.setFormatter(newFormatter);
        }
    }

    @Override
    public void setEncoding(String encoding) throws SecurityException, UnsupportedEncodingException {
        super.setEncoding(encoding);
        Handler t = resolve();
        if (t != null) {
            t.setEncoding(encoding);
        }
    }

    @Override
    public void setFilter(Filter newFilter) throws SecurityException {
        super.setFilter(newFilter);
        Handler t = resolve();
        if (t != null) {
            t.setFilter(newFilter);
        }
    }

    @Override
    public void setErrorManager(ErrorManager em) {
        super.setErrorManager(em);
        Handler t = resolve();
        if (t != null) {
            t.setErrorManager(em);
        }
    }

    @Override
    public void setLevel(Level newLevel) throws SecurityException {
        super.setLevel(newLevel);
        Handler t = resolve();
        if (t != null) {
            t.setLevel(newLevel);
        }
    }

    @Override
    public boolean isLoggable(LogRecord record) {
        Handler t = resolve();
        if (t != null) {
            return t.isLoggable(record);
        } else {
            return super.isLoggable(record);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy