Package com.dtolabs.rundeck.core.tasks.net

Source Code of com.dtolabs.rundeck.core.tasks.net.ThreadBoundJschLogger

package com.dtolabs.rundeck.core.tasks.net;

import com.dtolabs.rundeck.core.execution.BaseLogger;
import com.dtolabs.rundeck.plugins.PluginLogger;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Logger;

/**
* Uses an inheritable ThreadLocal {@link BaseLogger} to log Jsch messages, bind it by calling {@link #getInstance(com.dtolabs.rundeck.core.execution.BaseLogger, int)}
* and then {@link JSch#setLogger(com.jcraft.jsch.Logger) }
*
*
*/
public class ThreadBoundJschLogger implements Logger {
    private InheritableThreadLocal<BaseLogger> baseLogger;
    private InheritableThreadLocal<PluginLogger> pluginLogger;
    private InheritableThreadLocal<Integer> logLevel;
    private static ThreadBoundJschLogger instance;

    private ThreadBoundJschLogger() {
        baseLogger = new InheritableThreadLocal<BaseLogger>();
        pluginLogger = new InheritableThreadLocal<PluginLogger>();
        logLevel = new InheritableThreadLocal<Integer>();
    }

    /**
     * Get the shared instance
     *
     * @return
     */
    public static ThreadBoundJschLogger getInstance(final BaseLogger logger, final int loggingLevel) {
        getInstance();
        instance.setThreadLogger(logger, loggingLevel);
        return instance;
    }
    /**
     * Get the shared instance
     *
     * @return
     */
    public static ThreadBoundJschLogger getInstance(final PluginLogger logger, final int loggingLevel) {
        getInstance();
        instance.setThreadLogger(logger, loggingLevel);
        return instance;
    }

    private static void getInstance() {
        synchronized (ThreadBoundJschLogger.class) {
            if (null == instance) {
                instance = new ThreadBoundJschLogger();
            }
        }
    }

    /**
     * Set the thread-inherited logger with a loglevel on Jsch
     *
     * @param logger
     * @param loggingLevel
     */
    private void setThreadLogger(BaseLogger logger, int loggingLevel) {
        baseLogger.set(logger);
        logLevel.set(loggingLevel);
        JSch.setLogger(this);
    }
    /**
     * Set the thread-inherited logger with a loglevel on Jsch
     *
     * @param logger
     * @param loggingLevel
     */
    private void setThreadLogger(PluginLogger logger, int loggingLevel) {
        pluginLogger.set(logger);
        logLevel.set(loggingLevel);
        JSch.setLogger(this);
    }

    public boolean isEnabled(int level) {
        Integer integer = logLevel.get();
        return null != integer && integer <= level;
    }

    public void log(int level, String message) {
        BaseLogger baseLogger1 = baseLogger.get();
        PluginLogger pluginLogger1 = pluginLogger.get();
        if (null != baseLogger1) {
            switch (level) {
                case Logger.FATAL:
                case Logger.ERROR:
                    baseLogger1.error(message);
                    break;
                case Logger.WARN:
                    baseLogger1.warn(message);
                    break;
                case Logger.DEBUG:
                    baseLogger1.debug(message);
                    break;
                case Logger.INFO:
                default:
                    baseLogger1.log(message);
                    break;
            }
        }
        if (null != pluginLogger1) {
            switch (level) {
                case Logger.FATAL:
                case Logger.ERROR:
                    pluginLogger1.log(0, message);
                    break;
                case Logger.WARN:
                    pluginLogger1.log(1, message);
                    break;
                case Logger.DEBUG:
                    pluginLogger1.log(5, message);
                    break;
                case Logger.INFO:
                default:
                    pluginLogger1.log(5, message);
                    break;
            }
        }
    }
}
TOP

Related Classes of com.dtolabs.rundeck.core.tasks.net.ThreadBoundJschLogger

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.