⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 debug.java

📁 Sequoia ERP是一个真正的企业级开源ERP解决方案。它提供的模块包括:电子商务应用(e-commerce), POS系统(point of sales),知识管理,存货与仓库管理
💻 JAVA
字号:
/* * $Id: Debug.java 7285 2006-04-12 18:40:19Z jaz $ * *  Copyright (c) 2001-2005 The Open For Business Project - www.ofbiz.org * *  Permission is hereby granted, free of charge, to any person obtaining a *  copy of this software and associated documentation files (the "Software"), *  to deal in the Software without restriction, including without limitation *  the rights to use, copy, modify, merge, publish, distribute, sublicense, *  and/or sell copies of the Software, and to permit persons to whom the *  Software is furnished to do so, subject to the following conditions: * *  The above copyright notice and this permission notice shall be included *  in all copies or substantial portions of the Software. * *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY *  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT *  OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *  THE USE OR OTHER DEALINGS IN THE SOFTWARE. */package org.ofbiz.base.util;import java.io.IOException;import java.io.PrintStream;import java.io.PrintWriter;import java.text.DateFormat;import java.util.Enumeration;import java.util.HashMap;import java.util.Map;import org.apache.avalon.util.exception.ExceptionHelper;import org.apache.log4j.Level;import org.apache.log4j.Logger;import org.apache.log4j.PatternLayout;import org.apache.log4j.PropertyConfigurator;import org.apache.log4j.RollingFileAppender;import org.apache.log4j.Appender;import org.apache.log4j.spi.LoggerRepository;import org.ofbiz.base.util.collections.FlexibleProperties;/** * Configurable Debug logging wrapper class * * @author     <a href="mailto:jonesde@ofbiz.org">David E. Jones</a> * @author     <a href="mailto:jaz@ofbiz.org">Andy Zeneski</a> * @version    $Rev: 7285 $ * @since      2.0 */public final class Debug {    public static final boolean useLog4J = true;    public static final String noModuleModule = "NoModule";  // set to null for previous behavior        static DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM);    public static final String SYS_DEBUG = System.getProperty("DEBUG");    public static final int ALWAYS = 0;    public static final int VERBOSE = 1;    public static final int TIMING = 2;    public static final int INFO = 3;    public static final int IMPORTANT = 4;    public static final int WARNING = 5;    public static final int ERROR = 6;    public static final int FATAL = 7;    public static final String[] levels = {"Always", "Verbose", "Timing", "Info", "Important", "Warning", "Error", "Fatal"};    public static final String[] levelProps = {"", "print.verbose", "print.timing", "print.info", "print.important", "print.warning", "print.error", "print.fatal"};    public static final Level[] levelObjs = {Level.INFO, Level.DEBUG, Level.DEBUG, Level.INFO, Level.INFO, Level.WARN, Level.ERROR, Level.FATAL};    protected static Map levelStringMap = new HashMap();        protected static PrintStream printStream = System.out;    protected static PrintWriter printWriter = new PrintWriter(printStream);    protected static boolean levelOnCache[] = new boolean[8];    protected static boolean packException = true;    protected static final boolean useLevelOnCache = true;        protected static Logger root = Logger.getRootLogger();    static {        levelStringMap.put("verbose", new Integer(Debug.VERBOSE));        levelStringMap.put("timing", new Integer(Debug.TIMING));        levelStringMap.put("info", new Integer(Debug.INFO));        levelStringMap.put("important", new Integer(Debug.IMPORTANT));        levelStringMap.put("warning", new Integer(Debug.WARNING));        levelStringMap.put("error", new Integer(Debug.ERROR));        levelStringMap.put("fatal", new Integer(Debug.FATAL));        levelStringMap.put("always", new Integer(Debug.ALWAYS));                // initialize Log4J        PropertyConfigurator.configure(FlexibleProperties.makeFlexibleProperties(UtilURL.fromResource("debug.properties")));        // initialize levelOnCache        for (int i = 0; i < 8; i++) {            levelOnCache[i] = (i == Debug.ALWAYS || UtilProperties.propertyValueEqualsIgnoreCase("debug.properties", levelProps[i], "true"));        }                if (SYS_DEBUG != null) {            for (int x = 0; x < 8; x++) {                levelOnCache[x] = true;            }            LoggerRepository repo = root.getLoggerRepository();            Enumeration en = repo.getCurrentLoggers();            while (en.hasMoreElements()) {                Logger thisLogger = (Logger) en.nextElement();                thisLogger.setLevel(Level.DEBUG);            }                    }        // configure exception packing        packException = UtilProperties.propertyValueEqualsIgnoreCase("debug.properties", "pack.exception", "true");    }        public static PrintStream getPrintStream() {        return printStream;    }    public static void setPrintStream(PrintStream printStream) {        Debug.printStream = printStream;        Debug.printWriter = new PrintWriter(printStream);    }    public static PrintWriter getPrintWriter() {        return printWriter;    }    public static Logger getLogger(String module) {        if (module != null && module.length() > 0) {            return Logger.getLogger(module);        } else {            return root;        }    }    /** Gets an Integer representing the level number from a String representing the level name; will return null if not found */    public static Integer getLevelFromString(String levelName) {        if (levelName == null) return null;        return (Integer) levelStringMap.get(levelName.toLowerCase());    }        /** Gets an int representing the level number from a String representing the level name; if level not found defaults to Debug.INFO */    public static int getLevelFromStringWithDefault(String levelName) {        Integer levelInt = getLevelFromString(levelName);        if (levelInt == null) {            return Debug.INFO;        } else {            return levelInt.intValue();        }    }        public static void log(int level, Throwable t, String msg, String module) {        log(level, t, msg, module, "org.ofbiz.base.util.Debug");    }    public static void log(int level, Throwable t, String msg, String module, String callingClass) {        if (isOn(level)) {            // pack the exception            if (packException && t != null) {                msg = System.getProperty("line.separator") + ExceptionHelper.packException(msg, t, true);                t = null;            }            // log            if (useLog4J) {                Logger logger = getLogger(module);                if (SYS_DEBUG != null) {                    logger.setLevel(Level.DEBUG);                }                logger.log(callingClass, levelObjs[level], msg, t);            } else {                StringBuffer prefixBuf = new StringBuffer();                prefixBuf.append(dateFormat.format(new java.util.Date()));                prefixBuf.append(" [OFBiz");                if (module != null) {                    prefixBuf.append(":");                    prefixBuf.append(module);                }                prefixBuf.append(":");                prefixBuf.append(levels[level]);                prefixBuf.append("] ");                if (msg != null) {                    getPrintWriter().print(prefixBuf.toString());                    getPrintWriter().println(msg);                }                if (t != null) {                    getPrintWriter().print(prefixBuf.toString());                    getPrintWriter().println("Received throwable:");                    t.printStackTrace(getPrintWriter());                }            }        }    }    public static boolean isOn(int level) {        if (useLevelOnCache) {            return levelOnCache[level];        } else {            return (level == Debug.ALWAYS || UtilProperties.propertyValueEqualsIgnoreCase("debug", levelProps[level], "true"));        }    }        // leaving these here    public static void log(String msg) {        log(Debug.ALWAYS, null, msg, noModuleModule);    }        public static void log(Throwable t) {        log(Debug.ALWAYS, t, null, noModuleModule);    }    public static void log(String msg, String module) {        log(Debug.ALWAYS, null, msg, module);    }        public static void log(Throwable t, String module) {        log(Debug.ALWAYS, t, null, module);    }    public static void log(Throwable t, String msg, String module) {        log(Debug.ALWAYS, t, msg, module);    }    public static boolean verboseOn() {        return isOn(Debug.VERBOSE);    }        public static void logVerbose(String msg, String module) {        log(Debug.VERBOSE, null, msg, module);    }       public static void logVerbose(Throwable t, String module) {        log(Debug.VERBOSE, t, null, module);    }    public static void logVerbose(Throwable t, String msg, String module) {        log(Debug.VERBOSE, t, msg, module);    }    public static boolean timingOn() {        return isOn(Debug.TIMING);    }       public static void logTiming(String msg, String module) {        log(Debug.TIMING, null, msg, module);    }    public static void logTiming(Throwable t, String module) {        log(Debug.TIMING, t, null, module);    }    public static void logTiming(Throwable t, String msg, String module) {        log(Debug.TIMING, t, msg, module);    }    public static boolean infoOn() {        return isOn(Debug.INFO);    }        public static void logInfo(String msg, String module) {        log(Debug.INFO, null, msg, module);    }    public static void logInfo(Throwable t, String module) {        log(Debug.INFO, t, null, module);    }    public static void logInfo(Throwable t, String msg, String module) {        log(Debug.INFO, t, msg, module);    }    public static boolean importantOn() {        return isOn(Debug.IMPORTANT);    }    public static void logImportant(String msg, String module) {        log(Debug.IMPORTANT, null, msg, module);    }    public static void logImportant(Throwable t, String module) {        log(Debug.IMPORTANT, t, null, module);    }    public static void logImportant(Throwable t, String msg, String module) {        log(Debug.IMPORTANT, t, msg, module);    }    public static boolean warningOn() {        return isOn(Debug.WARNING);    }    public static void logWarning(String msg, String module) {        log(Debug.WARNING, null, msg, module);    }    public static void logWarning(Throwable t, String module) {        log(Debug.WARNING, t, null, module);    }    public static void logWarning(Throwable t, String msg, String module) {        log(Debug.WARNING, t, msg, module);    }    public static boolean errorOn() {        return isOn(Debug.ERROR);    }    public static void logError(String msg, String module) {        log(Debug.ERROR, null, msg, module);    }    public static void logError(Throwable t, String module) {        log(Debug.ERROR, t, null, module);    }    public static void logError(Throwable t, String msg, String module) {        log(Debug.ERROR, t, msg, module);    }    public static boolean fatalOn() {        return isOn(Debug.FATAL);    }    public static void logFatal(String msg, String module) {        log(Debug.FATAL, null, msg, module);    }    public static void logFatal(Throwable t, String module) {        log(Debug.FATAL, t, null, module);    }    public static void logFatal(Throwable t, String msg, String module) {        log(Debug.FATAL, t, msg, module);    }    public static void set(int level, boolean on) {        if (!useLevelOnCache)            return;        levelOnCache[level] = on;    }    public static synchronized Appender getNewFileAppender(String name, String logFile, long maxSize, int backupIdx, String pattern) {        if (pattern == null) {            pattern = "%-5r[%24F:%-3L:%-5p]%x %m%n";        }        PatternLayout layout = new PatternLayout(pattern);        layout.activateOptions();        RollingFileAppender newAppender = null;        try {            newAppender = new RollingFileAppender(layout, logFile, true);        } catch (IOException e) {            logFatal(e, Debug.class.getName());        }        if (newAppender != null) {            if (backupIdx > 0) {                newAppender.setMaxBackupIndex(backupIdx);            }            if (maxSize > 0) {                newAppender.setMaximumFileSize(maxSize);            }            newAppender.activateOptions();            newAppender.setName(name);        }        return newAppender;    }    public static boolean registerFileAppender(String module, String name, String logFile, long maxSize, int backupIdx, String pattern) {        Logger logger = Logger.getLogger(module);        boolean found = false;        Appender foundAppender = logger.getAppender(name);        if (foundAppender == null) {            Enumeration enum = Logger.getRootLogger().getLoggerRepository().getCurrentLoggers();            while (enum.hasMoreElements() && foundAppender == null) {                Logger log = (Logger) enum.nextElement();                foundAppender = log.getAppender(name);            }        } else {            return true;        }        if (foundAppender == null) {            if (logFile != null) {                foundAppender = getNewFileAppender(name, logFile, maxSize, backupIdx, pattern);                if (foundAppender != null) {                    found = true;                }            }        } else {            found = true;        }        logger.addAppender(foundAppender);        return found;    }    public static boolean registerFileAppender(String module, String name, String logFile) {        return registerFileAppender(module, name, logFile, 0, 10, null);    }    public static boolean registerFileAppender(String module, String name) {        return registerFileAppender(module, name, null, -1, -1, null);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -