亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? loggerfactory.java

?? Java開發(fā)最新的日志記錄工具slf4j的源碼
?? JAVA
字號(hào):
/*
 * Copyright (c) 2004-2008 QOS.ch
 * All rights reserved.
 * 
 * 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.slf4j;

import java.util.Arrays;
import java.util.List;

import org.slf4j.helpers.SubstituteLoggerFactory;
import org.slf4j.helpers.Util;
import org.slf4j.impl.StaticLoggerBinder;

/**
 * The <code>LoggerFactory</code> is a utility class producing Loggers for
 * various logging APIs, most notably for log4j, logback and JDK 1.4 logging.
 * Other implementations such as {@link org.slf4j.impl.NOPLogger NOPLogger} and
 * {@link org.slf4j.impl.SimpleLogger SimpleLogger} are also supported.
 * 
 * <p>
 * <code>LoggerFactory</code> is essentially a wrapper around an
 * {@link ILoggerFactory} instance bound with <code>LoggerFactory</code> at
 * compile time.
 * 
 * <p>
 * Please note that all methods in <code>LoggerFactory</code> are static.
 * 
 * @author Ceki G&uuml;lc&uuml;
 */
public final class LoggerFactory {

  static final String NO_STATICLOGGERBINDER_URL = "http://www.slf4j.org/codes.html#StaticLoggerBinder";
  static final String NULL_LF_URL = "http://www.slf4j.org/codes.html#null_LF";
  static final String VERSION_MISMATCH = "http://www.slf4j.org/codes.html#version_mismatch";
  static final String SUBSTITUTE_LOGGER_URL = "http://www.slf4j.org/codes.html#substituteLogger";

  static final String UNSUCCESSFUL_INIT_URL = "http://www.slf4j.org/codes.html#unsuccessfulInit";
  static final String UNSUCCESSFUL_INIT_MSG = "org.slf4j.LoggerFactory could not be successfully initialized. See also "
      + UNSUCCESSFUL_INIT_URL;

  static final int UNINITIALIZED = 0;
  static final int ONGOING_INITILIZATION = 1;
  static final int FAILED_INITILIZATION = 2;
  static final int SUCCESSFUL_INITILIZATION = 3;
  
  static final int GET_SINGLETON_INEXISTENT = 1;
  static final int GET_SINGLETON_EXISTS = 2;
  
  
  
  static int INITIALIZATION_STATE = UNINITIALIZED;
  static int GET_SINGLETON_METHOD = UNINITIALIZED;
  static SubstituteLoggerFactory TEMP_FACTORY = new SubstituteLoggerFactory();

  /**
   * It is our responsibility to track version changes and manage the
   * compatibility list.
   * 
   * <p>
   */
  static private final String[] API_COMPATIBILITY_LIST = new String[] {
      "1.5.5", "1.5.6" };

  // private constructor prevents instantiation
  private LoggerFactory() {
  }

  /**
   * Force LoggerFactory to consider itself uninitialized.
   * 
   * <p>
   * This method is intended to be called by classes (in the same package) for
   * testing purposes. This method is internal. It can be modified, renamed or
   * removed at any time without notice. 
   * 
   * You are strongly discouraged from calling this method in production code.
   */
  static void reset() {
    INITIALIZATION_STATE = UNINITIALIZED;
    GET_SINGLETON_METHOD = UNINITIALIZED;
    TEMP_FACTORY = new SubstituteLoggerFactory();
  }

  private final static void performInitialization() {
    bind();
    versionSanityCheck();
  }

  private final static void bind() {
    try {
      // the next line does the binding
      getSingleton();
      INITIALIZATION_STATE = SUCCESSFUL_INITILIZATION;
      emitSubstitureLoggerWarning();
    } catch (NoClassDefFoundError ncde) {
      INITIALIZATION_STATE = FAILED_INITILIZATION;
      String msg = ncde.getMessage();
      if (msg != null && msg.indexOf("org/slf4j/impl/StaticLoggerBinder") != -1) {
        Util
            .reportFailure("Failed to load class \"org.slf4j.impl.StaticLoggerBinder\".");
        Util.reportFailure("See " + NO_STATICLOGGERBINDER_URL
            + " for further details.");

      }
      throw ncde;
    } catch (Exception e) {
      INITIALIZATION_STATE = FAILED_INITILIZATION;
      // we should never get here
      Util.reportFailure("Failed to instantiate logger ["
          + getSingleton().getLoggerFactoryClassStr() + "]", e);
    }
  }

  private final static void emitSubstitureLoggerWarning() {
    List loggerNameList = TEMP_FACTORY.getLoggerNameList();
    if (loggerNameList.size() == 0) {
      return;
    }
    Util
        .reportFailure("The following loggers will not work becasue they were created");
    Util
        .reportFailure("during the default configuration phase of the underlying logging system.");
    Util.reportFailure("See also " + SUBSTITUTE_LOGGER_URL);
    for (int i = 0; i < loggerNameList.size(); i++) {
      String loggerName = (String) loggerNameList.get(i);
      Util.reportFailure(loggerName);
    }
  }

  private final static void versionSanityCheck() {
    try {
      String requested = StaticLoggerBinder.REQUESTED_API_VERSION;

      boolean match = false;
      for (int i = 0; i < API_COMPATIBILITY_LIST.length; i++) {
        if (API_COMPATIBILITY_LIST[i].equals(requested)) {
          match = true;
        }
      }
      if (!match) {
        Util.reportFailure("The requested version " + requested
            + " by your slf4j binding is not compatible with "
            + Arrays.toString(API_COMPATIBILITY_LIST));
        Util.reportFailure("See " + VERSION_MISMATCH + " for further details.");
      }
    } catch (java.lang.NoSuchFieldError nsfe) {
      // given our large user base and SLF4J's commitment to backward
      // compatibility, we cannot cry here. Only for implementations
      // which willingly declare a REQUESTED_API_VERSION field do we
      // emit compatibility warnings.
    } catch (Throwable e) {
      // we should never reach here
      Util.reportFailure(
          "Unexpected problem occured during version sanity check", e);
    }
  }

  
  private final static StaticLoggerBinder getSingleton() {
    if(GET_SINGLETON_METHOD == GET_SINGLETON_INEXISTENT) {
      return StaticLoggerBinder.SINGLETON;
    }
    
    if(GET_SINGLETON_METHOD == GET_SINGLETON_EXISTS) {
      return StaticLoggerBinder.getSingleton();
    }
    
    try  {
      StaticLoggerBinder singleton = StaticLoggerBinder.getSingleton();
      GET_SINGLETON_METHOD = GET_SINGLETON_EXISTS;
      return singleton;
    } catch(NoSuchMethodError nsme) {
      GET_SINGLETON_METHOD = GET_SINGLETON_INEXISTENT;
      return StaticLoggerBinder.SINGLETON;
    }
    
    
  }
  /**
   * Return a logger named according to the name parameter using the statically
   * bound {@link ILoggerFactory} instance.
   * 
   * @param name
   *                The name of the logger.
   * @return logger
   */
  public static Logger getLogger(String name) {
    ILoggerFactory iLoggerFactory = getILoggerFactory();
    return iLoggerFactory.getLogger(name);
  }

  /**
   * Return a logger named corresponding to the class passed as parameter, using
   * the statically bound {@link ILoggerFactory} instance.
   * 
   * @param clazz
   *                the returned logger will be named after clazz
   * @return logger
   */
  public static Logger getLogger(Class clazz) {
    return getLogger(clazz.getName());
  }

  /**
   * Return the {@link ILoggerFactory} instance in use.
   * 
   * <p>
   * ILoggerFactory instance is bound with this class at compile time.
   * 
   * @return the ILoggerFactory instance in use
   */
  public static ILoggerFactory getILoggerFactory() {
    if (INITIALIZATION_STATE == UNINITIALIZED) {
      INITIALIZATION_STATE = ONGOING_INITILIZATION;
      performInitialization();

    }
    switch (INITIALIZATION_STATE) {
    case SUCCESSFUL_INITILIZATION:
      return getSingleton().getLoggerFactory();
    case FAILED_INITILIZATION:
      throw new IllegalStateException(UNSUCCESSFUL_INIT_MSG);
    case ONGOING_INITILIZATION:
      // support re-entrant behavior.
      // See also http://bugzilla.slf4j.org/show_bug.cgi?id=106
      return TEMP_FACTORY;
    }
    throw new IllegalStateException("Unreachable code");
  }
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美中文在线| 久久成人av少妇免费| 日本欧美一区二区三区| 一本大道综合伊人精品热热| 26uuu国产一区二区三区| 国产精品青草久久| 蜜臀av一区二区| 欧美性猛交xxxx乱大交退制版 | 精品盗摄一区二区三区| 国产精品美女久久久久高潮| 26uuu欧美| 中文字幕久久午夜不卡| 久久精品国产第一区二区三区| 日韩一区二区三区免费观看| www.成人在线| 久久网站热最新地址| 欧美国产精品一区二区| 秋霞av亚洲一区二区三| 在线观看日韩精品| 国产精品高潮呻吟| 蜜桃久久av一区| 欧美高清视频一二三区| 亚洲一区二区3| 91欧美一区二区| 高清不卡一区二区在线| 精品国产91久久久久久久妲己 | 精品国产免费一区二区三区四区| 亚洲国产日韩一区二区| 日本精品视频一区二区三区| 亚洲视频一区二区在线| 成人v精品蜜桃久久一区| 欧美国产视频在线| 不卡av在线网| 亚洲女人小视频在线观看| 欧美在线free| 日韩黄色一级片| 中文无字幕一区二区三区| 国产成人在线色| 国产精品国产三级国产普通话蜜臀| 国产在线精品一区二区夜色| 中文字幕日韩欧美一区二区三区| av一本久道久久综合久久鬼色| 亚洲青青青在线视频| 欧美另类变人与禽xxxxx| 秋霞av亚洲一区二区三| 国产精品乱人伦中文| 56国语精品自产拍在线观看| 国产真实乱子伦精品视频| 久久精品亚洲精品国产欧美 | 香蕉av福利精品导航| 一区二区三区日韩欧美| 免费成人你懂的| 国产精品系列在线观看| 国产午夜精品福利| 不卡高清视频专区| 日韩理论电影院| 97久久超碰国产精品电影| 亚洲精品免费播放| 欧美主播一区二区三区美女| 亚洲成人一二三| 国产一区美女在线| 亚洲欧美偷拍三级| 日韩欧美一级精品久久| 东方欧美亚洲色图在线| 欧美a级理论片| 国产亚洲精品免费| 国产iv一区二区三区| 亚瑟在线精品视频| 精品国产一区二区三区不卡| 波多野结衣在线aⅴ中文字幕不卡| 亚洲精品国产一区二区三区四区在线| 欧美mv日韩mv国产| 欧美丰满嫩嫩电影| 色综合天天视频在线观看| 国内精品久久久久影院薰衣草 | 综合电影一区二区三区| 欧美不卡激情三级在线观看| 99国产精品视频免费观看| 国产高清精品网站| 国产盗摄视频一区二区三区| 日韩高清不卡在线| 国产一区二区三区免费观看| 青青草97国产精品免费观看无弹窗版| 国产在线播放一区| 日韩精品一级二级| 国产欧美一区二区在线| 久久日一线二线三线suv| 911精品国产一区二区在线| 久久久久久久综合色一本| 日本成人在线不卡视频| 综合久久综合久久| 99久久99久久精品免费观看| 亚洲va欧美va人人爽午夜 | 久久se这里有精品| 国产调教视频一区| 欧美私人免费视频| 久久99久久99精品免视看婷婷| 亚洲婷婷综合色高清在线| 日韩视频免费观看高清完整版在线观看| 国产亚洲精品7777| 国产欧美一区二区精品性色超碰| 国产精品五月天| 亚洲精品视频一区二区| 亚洲午夜久久久| 免费看日韩a级影片| 黄色日韩网站视频| 成人午夜视频福利| 欧美日韩免费视频| 欧美哺乳videos| 国产精品伦一区| 午夜影院久久久| 国产精品99久久久久久久女警| www.欧美日韩| 91精品国产麻豆国产自产在线| 精品国产a毛片| 亚洲在线免费播放| 激情综合色综合久久综合| 99免费精品视频| 欧美一区二区三级| 日韩毛片高清在线播放| 性欧美大战久久久久久久久| 国产成人a级片| 欧美日本精品一区二区三区| 精品毛片乱码1区2区3区| 国产亚洲午夜高清国产拍精品| 亚洲精品国产a| 色偷偷成人一区二区三区91 | 欧美激情艳妇裸体舞| 亚洲一区视频在线| 久久99国产精品久久99| 国产人成亚洲第一网站在线播放| 91福利在线看| 91免费精品国自产拍在线不卡| 日本女人一区二区三区| 国产精品久久久久永久免费观看 | 国产永久精品大片wwwapp | 国产拍揄自揄精品视频麻豆| 国产在线观看一区二区| 欧美日韩国产一二三| 国产日韩欧美麻豆| 麻豆成人91精品二区三区| 成人免费精品视频| 久久免费偷拍视频| 麻豆一区二区三| 成人福利视频网站| 久久久亚洲综合| 久久精品国产亚洲5555| 91麻豆精品91久久久久久清纯| 亚洲欧洲日产国码二区| 丰满少妇久久久久久久| 精品乱码亚洲一区二区不卡| 天天综合色天天综合| 91免费视频网| 久久精品水蜜桃av综合天堂| 久久精品免费看| 欧美一区二区三区白人| 久久精品国产一区二区三区免费看| 欧美一区2区视频在线观看| 视频在线观看国产精品| 日韩免费观看2025年上映的电影| 天天综合日日夜夜精品| 日韩午夜激情视频| 国产一区二区三区| 亚洲精品国产高清久久伦理二区| 91亚洲精品久久久蜜桃| 国产成人在线影院 | 欧美日韩国产电影| 亚洲国产综合在线| 亚洲精品一线二线三线| 婷婷国产v国产偷v亚洲高清| 欧美精品第1页| 国产一区不卡视频| 中文字幕免费在线观看视频一区| 播五月开心婷婷综合| 亚洲成人7777| 69av一区二区三区| 成人在线视频一区二区| 欧美高清在线精品一区| 日本乱人伦一区| 亚洲成人av福利| 久久嫩草精品久久久精品一| 99亚偷拍自图区亚洲| 日本一区中文字幕| 青青草91视频| 不卡的av在线播放| 91亚洲精华国产精华精华液| 一区二区在线看| 免费日本视频一区| 国产一区在线观看视频| aa级大片欧美| 欧美日韩一区二区三区在线| 678五月天丁香亚洲综合网| 久久婷婷色综合| 国产精品成人午夜| 亚洲18女电影在线观看| 韩国成人在线视频| 99在线热播精品免费| 欧美日韩国产三级| 久久久精品免费免费| 一区二区在线观看视频|