ru.apertum.qsystem.common.QLog.java Source code

Java tutorial

Introduction

Here is the source code for ru.apertum.qsystem.common.QLog.java

Source

/*
 *  Copyright (C) 2010 {Apertum}Projects. web: www.apertum.ru email: info@apertum.ru
 * 
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 * 
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 * 
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package ru.apertum.qsystem.common;

import java.util.Enumeration;
import org.apache.commons.lang.SystemUtils;
import org.apache.log4j.Appender;
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Logger;

/**
 * ?,  4  ?.   ? getInstance() ?  ?? ??? l()
 *
 * @author Evgeniy Egorov
 */
public class QLog {

    //  ? 
    private static final String KEY_DEBUG = "DEBUG";
    private static final String KEY_LOG_INFO = "LOGINFO";
    private static final String KEY_DEMO = "DEMO";
    private static final String KEY_IDE = "ide";
    private static final String KEY_START = "-start";
    private static final String KEY_NOPLUGINS = "-noplugins";
    private static final String KEY_PAUSE = "-pause";
    private static final String KEY_TERMINAL = "-terminal";
    private static final String KEY_WELCOME_BTN = "-buttons";
    private static final String KEY_RETAIN = "-RETAIN";
    private static final String KEY_CLANGS = "-clangs";
    private static final String KEY_DELAY_INVITE_FIRST = "-dfi";
    private Logger logger = Logger.getLogger("server.file");//**.file.info.trace

    public Logger logger() {
        return logger;
    }

    /**
     * ?? ? ? ?  ?  ? 
     */
    private Logger logRep = Logger.getLogger("reports.file");
    private Logger logQUser = isServer1 ? Logger.getLogger("quser.file")
            : Logger.getLogger("reports.file.info.trace");

    public Logger logRep() {
        return logRep;
    }

    public Logger logQUser() {
        return logQUser;
    }

    /**
     *  
     */
    private final boolean isDebug;

    public boolean isDebug() {
        return isDebug;
    }

    /**
     *  ?.     ?     .
     */
    private final boolean isDemo;

    public boolean isDemo() {
        return isDemo;
    }

    private final boolean plaginable;

    public boolean isPlaginable() {
        return plaginable;
    }

    private final boolean terminal;

    public boolean isTerminal() {
        return terminal;
    }

    private final boolean buttons;

    public boolean isButtons() {
        return buttons;
    }

    private int pauseFirst = 15;

    public int getPauseFirst() {
        return pauseFirst;
    }

    private QLog() {

        boolean isDebugin = false;
        boolean isDem = false;
        boolean isPlug = true;
        boolean isTerminal = false;
        boolean isButtons = false;
        switch (loggerType) {
        case 0://?
            logger = Logger.getLogger("server.file");
            break;
        case 1://
            logger = Logger.getLogger("client.file");
            break;
        case 2://?
            logger = Logger.getLogger("reception.file");
            break;
        case 3://
            logger = Logger.getLogger("admin.file");
            break;
        case 4://
            logger = Logger.getLogger("welcome.file");
            break;
        case 5:// 
            logger = Logger.getLogger("user_buttons.file");
            break;
        default:
            throw new AssertionError();
        }

        //  , ?, ?  
        for (int i = 0; i < args1.length; i++) {
            // ,   
            if (KEY_DEBUG.equalsIgnoreCase(args1[i])) {
                switch (loggerType) {
                case 0://?
                    logger = Logger.getLogger("server.file.info.trace");
                    break;
                case 1://
                    logger = Logger.getLogger("client.file.info.trace");
                    break;
                case 2://?
                    logger = Logger.getLogger("reception.file.info.trace");
                    break;
                case 3://
                    logger = Logger.getLogger("admin.file.info.trace");
                    break;
                case 4://
                    logger = Logger.getLogger("welcome.file.info.trace");
                    break;
                case 5:// 
                    logger = Logger.getLogger("user_buttons.file.info.trace");
                    break;
                default:
                    throw new AssertionError();
                }
                isDebugin = true;
            }
            // ,   
            if (KEY_LOG_INFO.equalsIgnoreCase(args1[i])) {
                isDebugin = true;
                switch (loggerType) {
                case 0://?
                    logger = Logger.getLogger("server.file.info");
                    break;
                case 1://
                    logger = Logger.getLogger("client.file.info");
                    break;
                case 2://?
                    logger = Logger.getLogger("reception.file.info");
                    break;
                case 3://
                    logger = Logger.getLogger("admin.file.info");
                    break;
                case 4://
                    logger = Logger.getLogger("welcome.file.info");
                    break;
                case 5:// 
                    logger = Logger.getLogger("user_buttons.file.info");
                    break;
                default:
                    throw new AssertionError();
                }
            }
            if (!isIDE && SystemUtils.IS_OS_WINDOWS) { //   ?
                final Enumeration<Logger> lgs = logger.getLoggerRepository().getCurrentLoggers();
                while (lgs.hasMoreElements()) {
                    final Logger lg = lgs.nextElement();
                    final Enumeration<Appender> aps = lg.getAllAppenders();
                    while (aps.hasMoreElements()) {
                        final Appender ap = aps.nextElement();
                        if (ap instanceof ConsoleAppender) {
                            ((ConsoleAppender) ap).setEncoding("cp866");
                            ((ConsoleAppender) ap).activateOptions();
                        }
                    }
                }
            }

            // ,    ?.     ?     
            if (KEY_DEMO.equalsIgnoreCase(args1[i])) {
                isDem = true;
            }
            // ,   ?  . 
            if (KEY_NOPLUGINS.equalsIgnoreCase(args1[i])) {
                isPlug = false;
            }
            // ,   ?     ?. 
            if (KEY_TERMINAL.equalsIgnoreCase(args1[i])) {
                isTerminal = true;
            }
            // ,   ?  ?   ?. 
            if (KEY_WELCOME_BTN.equalsIgnoreCase(args1[i])) {
                isButtons = true;
            }
            // ,     ?. 
            if (KEY_PAUSE.equalsIgnoreCase(args1[i])) {
                if (i < args1.length - 1 && args1[i + 1].matches("^-?\\d+$")) {
                    try {
                        Thread.sleep(Integer.parseInt(args1[i + 1]) * 1000);
                    } catch (InterruptedException ex) {
                    }
                }
            }

            // ,        ? ? .    ? . 
            if (KEY_DELAY_INVITE_FIRST.equalsIgnoreCase(args1[i])) {
                if (i < args1.length - 1 && args1[i + 1].matches("^-?\\d+$")) {
                    pauseFirst = Integer.parseInt(args1[i + 1]);
                }
            }
        }
        /*if (!isDebugin) {
         final Properties settings = new Properties();
         final InputStream inStream = settings.getClass().getResourceAsStream("/ru/apertum/qsystem/common/version.properties");
         try {
         settings.load(inStream);
         } catch (IOException ex) {
         throw new ClientException(" ?  ?. " + ex);
         }
         }*/
        isDebug = isDebugin;
        isDemo = isDem;
        plaginable = isPlug;
        terminal = isTerminal;
        buttons = isButtons;

        if ("server.file.info.trace".equalsIgnoreCase(logger.getName())) {
            logRep = Logger.getLogger("reports.file.info.trace");
            logQUser = Logger.getLogger("quser.file.info.trace");
        } else {
            // ,   
            if ("server.file.info".equalsIgnoreCase(logger.getName())) {
                logRep = Logger.getLogger("reports.file.info");
                logQUser = Logger.getLogger("quser.file.info");
            }
        }
    }

    public static QLog l() {
        return LogerHolder.INSTANCE;
    }

    private static String[] args1 = new String[0];
    public static boolean isServer1 = false;
    public static boolean isIDE = false;
    public static boolean isSTART = false;
    public static boolean chooseLANGS = false;
    /**
     * ?  temp.json    ? ???.
     */
    public static boolean isRETAIN = false;
    public static int loggerType = 0; // 0-?,1-,2-?,3-,4-?

    /**
     *
     * @param args
     * @param type 0-?,1-,2-?,3-,4-?,5-?  
     * @return
     */
    public static QLog initial(String[] args, int type) {
        args1 = args;
        for (String string : args) {
            if (KEY_IDE.equalsIgnoreCase(string)) {
                isIDE = true;
            }
            if (KEY_START.equalsIgnoreCase(string)) {
                isSTART = true;
            }
            if (KEY_RETAIN.equalsIgnoreCase(string)) {
                isRETAIN = true;
            }
            if (KEY_CLANGS.equalsIgnoreCase(string)) {
                chooseLANGS = true;
            }
        }
        loggerType = type;
        isServer1 = type == 0;
        final QLog log = LogerHolder.INSTANCE;
        QLog.l().logger.info("START LOGER. Logger: " + QLog.l().logger().getName());
        if (isServer1) {
            QLog.l().logRep.info("START LOGGER for reports. Logger: " + QLog.l().logRep().getName());
        }
        QLog.l().logger.info("Mode: " + (QLog.l().isDebug() ? KEY_DEBUG : (QLog.l().isDemo() ? KEY_DEMO : "FULL")));
        QLog.l().logger.info("Plugins: " + (QLog.l().isPlaginable() ? "YES" : "NO"));
        if (isSTART) {
            QLog.l().logger.info("Auto start: YES");
        }

        return log;
    }

    private static class LogerHolder {

        private static final QLog INSTANCE = new QLog();
    }
}