Package org.logicalcobwebs.proxool.configuration

Source Code of org.logicalcobwebs.proxool.configuration.LogKitTargetAdapter

/*
* This software is released under a licence similar to the Apache Software Licence.
* See org.logicalcobwebs.proxool.package.html for details.
* The latest version is available at http://proxool.sourceforge.net
*/
package org.logicalcobwebs.proxool.configuration;

import org.apache.avalon.framework.CascadingThrowable;
import org.apache.log.LogEvent;
import org.apache.log.Priority;
import org.apache.log.output.AbstractOutputTarget;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
* An Avalon LogKit target that delegates to a Jakarta Commons <code>org.apache.commons.logging.Log</code>.
* Can be used to make Avalons internal logging go the same output as
* the Proxool internal logging.
* @version $Revision: 1.6 $, $Date: 2006/01/18 14:40:06 $
* @author Christian Nedregaard (christian_nedregaard@email.com)
* @author $Author: billhorsman $ (current maintainer)
* @since Proxool 0.6
*/
public class LogKitTargetAdapter extends AbstractOutputTarget {
    private boolean isOpen = true;

    /**
     * @see org.apache.log.output.AbstractOutputTarget#doProcessEvent(org.apache.log.LogEvent)
     */
    protected void doProcessEvent(LogEvent event) {
        // we do a workaround for the fact that Avalon CascadingThrowables
        // does not print the stacktrace of any nested exceptions.
        // Also we 'upgrade' DEBUG LogEvents containing Throwables
        // to WARN since Avalon seems to give some important exceptions
        // DEBUG priority.
        Throwable originalThrowable = event.getThrowable();
        Throwable nestedThrowable = null;
        if (originalThrowable != null && originalThrowable instanceof CascadingThrowable) {
            nestedThrowable = ((CascadingThrowable) originalThrowable).getCause();
        }
        int priority = event.getPriority().getValue();
        if (originalThrowable != null && event.getPriority().isLower(Priority.WARN)) {
            priority = Priority.WARN.getValue();
        }
        Log logger = LogFactory.getLog(event.getCategory());
        if (Priority.DEBUG.getValue() == priority) {
            if (logger.isDebugEnabled()) {
                logger.debug(event.getMessage(), originalThrowable);
            }
            if (nestedThrowable != null) {
                logger.debug("... caused by:", nestedThrowable);
            }
        } else if (Priority.INFO.getValue() == priority) {
            if (logger.isInfoEnabled()) {
                logger.info(event.getMessage(), originalThrowable);
            }
            if (nestedThrowable != null) {
                logger.info("... caused by:", nestedThrowable);
            }
        } else if (Priority.WARN.getValue() == priority) {
            logger.warn(event.getMessage(), originalThrowable);
            if (nestedThrowable != null) {
                logger.warn("... caused by:", nestedThrowable);
            }
        } else if (Priority.ERROR.getValue() == priority) {
            logger.error(event.getMessage(), originalThrowable);
            if (nestedThrowable != null) {
                logger.error("... caused by:", nestedThrowable);
            }
        } else if (Priority.FATAL_ERROR.getValue() == priority) {
            logger.fatal(event.getMessage(), originalThrowable);
            if (nestedThrowable != null) {
                logger.fatal("... caused by:", nestedThrowable);
            }
        } else {
            logger.warn("Got log event of unknown priority: " + priority
                    + ". Message: " + event.getMessage(), originalThrowable);
        }
    }

    /**
     * @see org.apache.log.output.AbstractOutputTarget#isOpen()
     */
    protected boolean isOpen() {
        return this.isOpen;
    }

    /**
     * @see org.apache.log.output.AbstractOutputTarget#open()
     */
    protected void open() {
        this.isOpen = true;
    }

    /**
     * @see org.apache.log.output.AbstractOutputTarget#close()
     */
    public void close() {
        this.isOpen = false;
    }

}

/*
Revision history:
$Log: LogKitTargetAdapter.java,v $
Revision 1.6  2006/01/18 14:40:06  billhorsman
Unbundled Jakarta's Commons Logging.

Revision 1.5  2003/03/04 10:24:41  billhorsman
removed try blocks around each test

Revision 1.4  2003/03/03 11:12:06  billhorsman
fixed licence

Revision 1.3  2003/03/01 15:27:25  billhorsman
checkstyle

Revision 1.2  2003/02/06 17:41:03  billhorsman
now uses imported logging

Revision 1.1  2002/12/23 02:39:43  chr32
Needed by the AvalonConfigurator tests.

*/
TOP

Related Classes of org.logicalcobwebs.proxool.configuration.LogKitTargetAdapter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.