psiprobe.tools.logging.log4j.Log4JLoggerAccessor.java Source code

Java tutorial

Introduction

Here is the source code for psiprobe.tools.logging.log4j.Log4JLoggerAccessor.java

Source

/**
 * Licensed under the GPL License. You may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 *
 * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
 * WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE.
 */
package psiprobe.tools.logging.log4j;

import org.apache.commons.beanutils.MethodUtils;

import psiprobe.tools.logging.DefaultAccessor;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;

/**
 * The Class Log4JLoggerAccessor.
 */
public class Log4JLoggerAccessor extends DefaultAccessor {

    /** The context. */
    private boolean context;

    /**
     * Gets the appenders.
     *
     * @return the appenders
     */
    public List<Log4JAppenderAccessor> getAppenders() {
        List<Log4JAppenderAccessor> appenders = new ArrayList<>();
        try {
            for (Object unwrappedAppender : Collections
                    .list((Enumeration<Object>) MethodUtils.invokeMethod(getTarget(), "getAllAppenders", null))) {
                Log4JAppenderAccessor appender = wrapAppender(unwrappedAppender);
                if (appender != null) {
                    appenders.add(appender);
                }
            }
        } catch (Exception e) {
            logger.error("{}#getAllAppenders() failed", getTarget().getClass().getName(), e);
        }
        return appenders;
    }

    /**
     * Gets the appender.
     *
     * @param name the name
     * @return the appender
     */
    public Log4JAppenderAccessor getAppender(String name) {
        try {
            Object appender = MethodUtils.invokeMethod(getTarget(), "getAppender", name);
            return wrapAppender(appender);
        } catch (Exception e) {
            logger.error("{}#getAppender() failed", getTarget().getClass().getName(), e);
        }
        return null;
    }

    /**
     * Checks if is context.
     *
     * @return true, if is context
     */
    public boolean isContext() {
        return context;
    }

    /**
     * Sets the context.
     *
     * @param context the new context
     */
    public void setContext(boolean context) {
        this.context = context;
    }

    /**
     * Checks if is root.
     *
     * @return true, if is root
     */
    public boolean isRoot() {
        return "root".equals(getName()) && "org.apache.log4j.spi.RootLogger".equals(getTargetClass());
    }

    /**
     * Gets the name.
     *
     * @return the name
     */
    public String getName() {
        return (String) getProperty(getTarget(), "name", null);
    }

    /**
     * Gets the level.
     *
     * @return the level
     */
    public String getLevel() {
        try {
            Object level = MethodUtils.invokeMethod(getTarget(), "getLevel", null);
            return (String) MethodUtils.invokeMethod(level, "toString", null);
        } catch (Exception e) {
            logger.error("{}#getLevel() failed", getTarget().getClass().getName(), e);
        }
        return null;
    }

    /**
     * Sets the level.
     *
     * @param newLevelStr the new level
     */
    public void setLevel(String newLevelStr) {
        try {
            Object level = MethodUtils.invokeMethod(getTarget(), "getLevel", null);
            Object newLevel = MethodUtils.invokeMethod(level, "toLevel", newLevelStr);
            MethodUtils.invokeMethod(getTarget(), "setLevel", newLevel);
        } catch (Exception e) {
            logger.error("{}#setLevel('{}') failed", getTarget().getClass().getName(), newLevelStr, e);
        }
    }

    /**
     * Wrap appender.
     *
     * @param appender the appender
     * @return the log4 j appender accessor
     */
    private Log4JAppenderAccessor wrapAppender(Object appender) {
        try {
            if (appender == null) {
                throw new IllegalArgumentException("appender is null");
            }
            Log4JAppenderAccessor appenderAccessor = new Log4JAppenderAccessor();
            appenderAccessor.setTarget(appender);
            appenderAccessor.setLoggerAccessor(this);
            appenderAccessor.setApplication(getApplication());
            return appenderAccessor;
        } catch (Exception e) {
            logger.error("Could not wrap appender: {}", appender, e);
        }
        return null;
    }

}