log4j2异步及总结

  • log4j可以配置输出到不同的地方,比如console,file,sockete,mq等

  • 每一种都输出都可以配置成异步的,包裹一下就可以了,具体看官网配置

  • 对于RollingFileAppender,默认bufferedIO 为true,底层对应的使用BufferedOutputStream,bufferSize 为8192bytes,这个也是BufferedOutputStream的默认配置。如果bufferedIO为false,则使用的是不带buffer的FileOutputStream

  • RollingFileAppender中的immediateFlush这个值默认是true,表示每次写入后都会flush操作,这个可以确保日志可以及时的写入磁盘,但是效率较低。这个配置无论对于同步和异步都起作用。但是对于异步,应该把immediateFlush设为false,这样的话,Asynchronous loggers and appenders will automatically flush at the end of a batch of events ,意思即批量刷,从如下代码也可以看出来

public void append(final LogEvent event) {
        readLock.lock();
        try {
            final byte[] bytes = getLayout().toByteArray(event);
            if (bytes.length > 0) {
                manager.write(bytes);
                if (this.immediateFlush || event.isEndOfBatch()) {
                    manager.flush();
                }
            }
        } catch (final AppenderLoggingException ex) {
            error("Unable to write to stream " + manager.getName() + " for appender " + getName());
            throw ex;
        } finally {
            readLock.unlock();
        }
    }
  • 应该优先使用RollingRandomAccessFileAppender 而不是RollingFileAppender,它是使用ByteBuffer + RandomAccessFile而不是BufferedOutputStream ,效率会提供20-200%,并且他总是buffered,因为使用了NIO中的ByteBuffer

  • 异步的4种方式 Log4j2一共有4中异步模式,也可以说是三种,因为有2种其实是一样的,看如下表格 输入图片说明

  • 如上表格,第一个和第三个效果是一样的,只不过用了第一个后,所有的都是异步的,而第三个,可以灵活配置同步和异步并存而已

  • 使用第四种,会额外起2个线程,一个处理Distruptor,另一个处理queue,Distruptor用来唤醒queue,实际的日志对象还是通过queue来存和取

  • RingBuffer的默认大小是256*1024,可以通过log4j2.asyncLoggerConfigRingBufferSize 来调整,对于log2j2.3必须使用-DAsyncLoggerConfig.RingBufferSize来调整

  • queue(ArrayBlockingQueue)的大小默认为128,可以通过AsyncAppender中的bufferSize来调整,如果使用LinkedTransferQueue,则忽略bufferSize参数,因为它 是一个无界队列,注意Log4j 2.7 及以上才支持

转载于:https://my.oschina.net/dxqr/blog/1813410

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值