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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? asyncappender.java

?? apache的log4j源碼
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License.  You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */// Contibutors:  Aaron Greenhouse <aarong@cs.cmu.edu>//               Thomas Tuft Muller <ttm@online.no>package org.apache.log4j;import org.apache.log4j.helpers.AppenderAttachableImpl;import org.apache.log4j.spi.AppenderAttachable;import org.apache.log4j.spi.LoggingEvent;import java.text.MessageFormat;import java.util.ArrayList;import java.util.Enumeration;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;/** * The AsyncAppender lets users log events asynchronously. * <p/> * <p/> * The AsyncAppender will collect the events sent to it and then dispatch them * to all the appenders that are attached to it. You can attach multiple * appenders to an AsyncAppender. * </p> * <p/> * <p/> * The AsyncAppender uses a separate thread to serve the events in its buffer. * </p> * <p/> * <b>Important note:</b> The <code>AsyncAppender</code> can only be script * configured using the {@link org.apache.log4j.xml.DOMConfigurator}. * </p> * * @author Ceki G&uuml;lc&uuml; * @author Curt Arnold * @since 0.9.1 */public class AsyncAppender extends AppenderSkeleton  implements AppenderAttachable {  /**   * The default buffer size is set to 128 events.   */  public static final int DEFAULT_BUFFER_SIZE = 128;  /**   * Event buffer, also used as monitor to protect itself and   * discardMap from simulatenous modifications.   */  private final List buffer = new ArrayList();  /**   * Map of DiscardSummary objects keyed by logger name.   */  private final Map discardMap = new HashMap();  /**   * Buffer size.   */  private int bufferSize = DEFAULT_BUFFER_SIZE;  /** Nested appenders. */  AppenderAttachableImpl aai;  /**   * Nested appenders.   */  private final AppenderAttachableImpl appenders;  /**   * Dispatcher.   */  private final Thread dispatcher;  /**   * Should location info be included in dispatched messages.   */  private boolean locationInfo = false;  /**   * Does appender block when buffer is full.   */  private boolean blocking = true;  /**   * Create new instance.   */  public AsyncAppender() {    appenders = new AppenderAttachableImpl();    //    //   only set for compatibility    aai = appenders;    dispatcher =      new Thread(new Dispatcher(this, buffer, discardMap, appenders));    // It is the user's responsibility to close appenders before    // exiting.    dispatcher.setDaemon(true);    // set the dispatcher priority to lowest possible value    //        dispatcher.setPriority(Thread.MIN_PRIORITY);    dispatcher.setName("Dispatcher-" + dispatcher.getName());    dispatcher.start();  }  /**   * Add appender.   *   * @param newAppender appender to add, may not be null.   */  public void addAppender(final Appender newAppender) {    synchronized (appenders) {      appenders.addAppender(newAppender);    }  }  /**   * {@inheritDoc}   */  public void append(final LoggingEvent event) {    //    //   if dispatcher thread has died then    //      append subsequent events synchronously    //   See bug 23021    if ((dispatcher == null) || !dispatcher.isAlive() || (bufferSize <= 0)) {      synchronized (appenders) {        appenders.appendLoopOnAppenders(event);      }      return;    }    // Set the NDC and thread name for the calling thread as these    // LoggingEvent fields were not set at event creation time.    event.getNDC();    event.getThreadName();    // Get a copy of this thread's MDC.    event.getMDCCopy();    if (locationInfo) {      event.getLocationInformation();    }    synchronized (buffer) {      while (true) {        int previousSize = buffer.size();        if (previousSize < bufferSize) {          buffer.add(event);          //          //   if buffer had been empty          //       signal all threads waiting on buffer          //       to check their conditions.          //          if (previousSize == 0) {            buffer.notifyAll();          }          break;        }        //        //   Following code is only reachable if buffer is full        //        //        //   if blocking and thread is not already interrupted        //      and not the dispatcher then        //      wait for a buffer notification        boolean discard = true;        if (blocking                && !Thread.interrupted()                && Thread.currentThread() != dispatcher) {          try {            buffer.wait();            discard = false;          } catch (InterruptedException e) {            //            //  reset interrupt status so            //    calling code can see interrupt on            //    their next wait or sleep.            Thread.currentThread().interrupt();          }        }        //        //   if blocking is false or thread has been interrupted        //   add event to discard map.        //        if (discard) {          String loggerName = event.getLoggerName();          DiscardSummary summary = (DiscardSummary) discardMap.get(loggerName);          if (summary == null) {            summary = new DiscardSummary(event);            discardMap.put(loggerName, summary);          } else {            summary.add(event);          }          break;        }      }    }  }  /**   * Close this <code>AsyncAppender</code> by interrupting the dispatcher   * thread which will process all pending events before exiting.   */  public void close() {    /**     * Set closed flag and notify all threads to check their conditions.     * Should result in dispatcher terminating.     */    synchronized (buffer) {      closed = true;      buffer.notifyAll();    }    try {      dispatcher.join();    } catch (InterruptedException e) {      Thread.currentThread().interrupt();      org.apache.log4j.helpers.LogLog.error(        "Got an InterruptedException while waiting for the "        + "dispatcher to finish.", e);    }    //    //    close all attached appenders.    //    synchronized (appenders) {      Enumeration iter = appenders.getAllAppenders();      if (iter != null) {        while (iter.hasMoreElements()) {          Object next = iter.nextElement();          if (next instanceof Appender) {            ((Appender) next).close();          }        }      }    }  }  /**   * Get iterator over attached appenders.   * @return iterator or null if no attached appenders.   */  public Enumeration getAllAppenders() {    synchronized (appenders) {      return appenders.getAllAppenders();    }  }  /**   * Get appender by name.   *   * @param name name, may not be null.   * @return matching appender or null.   */  public Appender getAppender(final String name) {    synchronized (appenders) {      return appenders.getAppender(name);    }  }  /**   * Gets whether the location of the logging request call   * should be captured.   *   * @return the current value of the <b>LocationInfo</b> option.   */  public boolean getLocationInfo() {    return locationInfo;  }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
另类成人小视频在线| 亚洲欧洲韩国日本视频| 欧美精品vⅰdeose4hd| 91麻豆精品久久久久蜜臀| 精品国产青草久久久久福利| 国产欧美一区二区三区鸳鸯浴| 亚洲色图.com| 国产一区二区在线影院| 色综合久久99| 精品国产一区二区亚洲人成毛片| 久久 天天综合| 欧美视频一区二| 久久精品人人爽人人爽| 久久久久久久电影| 99视频精品在线| 91黄色免费看| 欧美国产丝袜视频| 奇米综合一区二区三区精品视频| 国产传媒久久文化传媒| 69堂精品视频| 国产乱一区二区| 国产精品亚洲а∨天堂免在线| 中文字幕一区二区在线观看| 欧美影院精品一区| 国产一区欧美日韩| 一区二区三区四区亚洲| 国产成人免费在线视频| 亚洲老司机在线| 91小视频在线免费看| 国产情人综合久久777777| 91在线播放网址| 久久激情五月婷婷| 国产精品久久精品日日| 国产一区亚洲一区| 国模无码大尺度一区二区三区| 国产日韩精品视频一区| 国产成人av电影在线| 欧美精品一区二区三区四区 | 久久综合九色综合97婷婷| 麻豆精品在线播放| www国产精品av| 一本久久a久久免费精品不卡| 免费观看日韩电影| 一区二区三区在线播放| 国产午夜精品在线观看| 欧美系列一区二区| 成人精品高清在线| 国产精品久久久久久久久免费相片 | 欧美人牲a欧美精品| 亚洲国产aⅴ天堂久久| 从欧美一区二区三区| 亚洲图片激情小说| 2021国产精品久久精品| 这里只有精品99re| 99精品在线免费| 亚洲欧美日韩成人高清在线一区| 91免费视频观看| 国内偷窥港台综合视频在线播放| 一区二区三国产精华液| 国产精品久久久爽爽爽麻豆色哟哟| 日韩欧美国产wwwww| 日韩中文字幕91| 欧美成人video| 精品亚洲免费视频| 亚洲免费av观看| 亚洲精品在线网站| 欧美精品 国产精品| 日本高清成人免费播放| 成年人网站91| 成人精品高清在线| 99久久精品国产麻豆演员表| 福利电影一区二区| 国产成人精品三级| 国产精品18久久久久久久网站| 六月丁香婷婷久久| 久久91精品国产91久久小草| 日韩av在线播放中文字幕| 在线成人av影院| 欧美精品三级在线观看| 91精品国产综合久久精品性色| 欧美日韩精品电影| 欧美日韩电影一区| 欧美老肥妇做.爰bbww| 欧美日韩美少妇| 欧美日韩dvd在线观看| 欧美高清hd18日本| 欧美一级一区二区| 成人激情综合网站| 日韩欧美亚洲国产另类| 91污片在线观看| 欧美精品一区视频| 日韩欧美的一区| 亚洲精品成人a在线观看| 国产精品国产成人国产三级| 日韩一区二区三区视频在线| 国产精品久久久久一区二区三区共| 欧美高清视频www夜色资源网| 国产精品国产三级国产aⅴ原创 | 成人午夜激情影院| 国产91综合一区在线观看| 精品一区二区在线观看| 亚洲一区二区五区| 在线看日本不卡| 日韩高清不卡一区| 亚洲韩国一区二区三区| 中文字幕一区二区三区av | 国产又粗又猛又爽又黄91精品| 麻豆精品视频在线观看| 日韩高清不卡一区二区| 轻轻草成人在线| 99re视频精品| 日韩天堂在线观看| 1000精品久久久久久久久| 老司机午夜精品| 99国产精品久久久久久久久久久| 欧美xxx久久| 亚洲成a人片在线观看中文| 日韩精品一区二| 亚洲图片一区二区| 色噜噜狠狠色综合欧洲selulu| 亚洲欧洲精品一区二区三区| 99国产精品国产精品久久| 久久在线观看免费| 国产一区二区三区四| 日本一区二区三区国色天香 | 91视频在线看| 亚洲综合av网| 91在线观看美女| 亚洲一区中文在线| 欧美日韩国产在线观看| 中文字幕国产一区| 欧美一区二区三区四区久久| 亚洲男人的天堂一区二区| 久久精品亚洲国产奇米99| 日韩精品亚洲一区| 精品国产乱码久久久久久免费| 亚洲动漫第一页| 欧美日韩国产一级二级| 国内成+人亚洲+欧美+综合在线| 久久久久亚洲蜜桃| 国产馆精品极品| 天天色天天爱天天射综合| 亚洲电影中文字幕在线观看| 精品久久五月天| 国产精品久久久久一区二区三区共 | 国产乱色国产精品免费视频| 亚洲精品视频在线观看免费| 国产亚洲精品bt天堂精选| 欧美日韩免费高清一区色橹橹| 国内偷窥港台综合视频在线播放| 樱花影视一区二区| 日韩精品一区二区三区老鸭窝| 91麻豆国产香蕉久久精品| 久久99国产精品久久| 一区二区三区免费| 国产精品久久久一本精品 | 成人h精品动漫一区二区三区| 亚洲成人第一页| 亚洲视频一区在线| 中文字幕国产一区二区| 国产午夜精品久久久久久久| 91精品欧美福利在线观看| 日本精品一区二区三区四区的功能| 国产综合一区二区| 国产麻豆视频一区二区| 精品亚洲国产成人av制服丝袜| 日韩视频免费观看高清在线视频| 99riav久久精品riav| 国产精品一区二区黑丝| 国产成人在线色| 国产乱人伦偷精品视频免下载| 国模冰冰炮一区二区| 免费在线观看视频一区| 精品一区二区在线播放| 日本精品视频一区二区| 欧洲精品一区二区三区在线观看| 国产日韩v精品一区二区| 久久久久久夜精品精品免费| 亚洲免费色视频| 国产美女精品一区二区三区| 欧美视频第二页| 日本一区二区综合亚洲| 日本aⅴ亚洲精品中文乱码| 中文字幕一区二区三| 三级一区在线视频先锋| 国产精品亚洲а∨天堂免在线| 欧美日本一区二区三区| 久久婷婷国产综合精品青草| 亚洲欧美电影一区二区| 麻豆成人久久精品二区三区红 | 7777精品久久久大香线蕉 | 欧美一卡二卡三卡| 欧美日韩色综合| 亚洲.国产.中文慕字在线| 日韩av在线播放中文字幕| 国产成人综合在线观看| 欧美午夜电影一区| 国产日韩亚洲欧美综合| 一区二区三区视频在线观看| 免费高清不卡av|