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

log4j appender自定义_log4j routingappender_fileappender log4j(8)

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

28buffer.notifyAll();

29}

30}

31if (events != null) {

32for (int i = 0; i < events.length; i++) {

33synchronized (appenders) {

34appenders.appendLoopOnAppenders(events[i]);

35}

36}

37}

38}

39} catch (InterruptedException ex) {

40Thread.currentThread().interrupt();

41}

42 }

这里其实有一个bug,即当程序停止时只剩下discardMap中有日志信息,而buffer中没有日志信息,由于Dispatcher线程不检查discardMap中的日志信息,因而此时会导致discardMap中的日志信息丢失。即使在生成者中当buffer为空时,它也会激活buffer锁,然而即使激活后buffer本身大小还是为0,因而不会处理之后的逻辑,因而这个逻辑也处理不了该bug。

对于生产者,它首先处理当消费者线程出现异常而不活动时,此时将同步的输出日志;而后根据配置获取LoggingEvent中的数据;再获得buffer的对象锁,如果buffer还没满,则直接将LoggingEvent实例添加到buffer中,否则如果blocking设置为true,即生产者会等消费者处理完后再继续下一次接收数据。如果blocking设置为fasle或者消费者线程被打断,那么当前的LoggingEvent实例则会保存在discardMap中,因为此时buffer已满。

1 public void append(final LoggingEvent event) {

2if ((dispatcher == null) || !dispatcher.isAlive() || (bufferSize <= 0)) {

3synchronized (appenders) {

4appenders.appendLoopOnAppenders(event);

5}

6return;

7}

8event.getNDC();

9event.getThreadName();

10event.getMDCCopy();

11if (locationInfo) {

12event.getLocationInformation();

13}

14event.getRenderedMessage();

15event.getThrowableStrRep();

16synchronized (buffer) {

17while (true) {

18int previousSize = buffer.size();

19if (previousSize < bufferSize) {

20buffer.add(event);

21if (previousSize == 0) {

22buffer.notifyAll();

23}

24break;

25}

26boolean discard = true;

27if (blocking && !Thread.interrupted()

28&& Thread.currentThread() != dispatcher) {

29try {

30buffer.wait();

31discard = false;

32} catch (InterruptedException e) {


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

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

    • 邢康良
      邢康良

      家电使用20年还杠杠的只能说明设计过度

    • 郭志民
      郭志民

      xihuan

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