b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

log4j appender自定义_log4j routingappender_fileappender log4j(7)

电脑杂谈  发布时间:2017-01-30 04:04:43  来源:网络整理

AsyncAppender并不会在每一次的doAppend()调用中都直接将消息输出,而是使用了buffer,即只有等到buffer中LoggingEvent实例到达bufferSize个的时候才真正的处理这些消息,当然我们也可以讲bufferSize设置成1,从而实现每一个LoggingEvent实例的请求都会直接执行。如果bufferSize设置过大,在应用程序异常终止时可能会丢失部分日志。

1 public static final int DEFAULT_BUFFER_SIZE = 128;

2 private final List buffer = new ArrayList();

3 private final Map discardMap = new HashMap();

4 private int bufferSize = DEFAULT_BUFFER_SIZE;

5 private final Thread dispatcher;

6 private boolean locationInfo = false;

7 private boolean blocking = true;

对其他字段,discardMap用于存放当当前LoggingEvent请求数已经超过bufferSize或当前线程被中断的情况下能继续保留这些日志信息;locationInfo用于设置是否需要保留位置信息;blocking用于设置在消费者正在处理时,是否需要生产者“暂停”下来,默认为true;而dispatcher即是消费者线程,它在构建AsyncAppender是启动,每次buffer这个list,如果发现buffer中存在LoggingEvent实例,则将所有buffer和discardMap中的LoggingEvent实例拷贝到数组中,清空buffer和discardMap,并调用AsyncAppender内部注册的Appender实例打印日志。

1 public void run() {

2boolean isActive = true;

3try {

4while (isActive) {

5LoggingEvent[] events = null;

6synchronized (buffer) {

7int bufferSize = buffer.size();

8isActive = !parent.closed;

9

10while ((bufferSize == 0) && isActive) {

11buffer.wait();

12bufferSize = buffer.size();

13isActive = !parent.closed;

14}

15if (bufferSize > 0) {

16events = new LoggingEvent[bufferSize

17+ discardMap.size()];

18buffer.toArray(events);

19int index = bufferSize;

20

21for (Iterator iter = discardMap.values().iterator(); iter

22.hasNext();) {

23events[index++] = ((DiscardSummary) iter.next())

24.createEvent();

25}

26buffer.clear();

27discardMap.clear();


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-29497-7.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 清穆宗
      清穆宗

      怎么知道发布新闻的机构是真的质检总局

    • 王海洋
      王海洋

      对美国不要抱任何幻想

    • 李损之
      李损之

      还是14度16度的橙色喝着爽

      • 吕敞
        吕敞

        强烈建议大家更新后抹除所有数据

    热点图片
    拼命载入中...