折中
使用log4j2异步日志,可以通过异步线程处理写磁盘的方式,提高应用的响应速度。
但是,并不是所有情况都适用于异步日志。下面描述一下在一些情况下使用日志策略的一些取舍。
优势
1.高峰流量。异步日志可以帮助应用来处理突然的流量高峰带来的大量的写请求。如文档描述:异步日志大约比同步日志有6-68倍的在这种情况下的处理能力的提升。
异步日志底层实现是通过一个队列,来记录每次写请求的请求内容。工作模式类似于生产者和消费者模式。这样可以抵御突如其来的大量请求。但是如果大量请求一旦持续进行,导致队列写满。那么整个请求会卡死,直到写入队列为止。
2.响应快。异步日志只需要将请求写入队列,而耗时的写磁盘部分通过异步线程的方式进行。但是如遇到队列写满时,请求会被阻塞。
由此看来,异步的优势在于更快的响应速度和处理流量洪峰的能力。但是使用时一定要注意任务队列不要被写满。
劣势
1.异常处理。由于处理请求是异步执行的,因此也会面临异步线程的异常捕获和处理问题。
2.少数情况下,需要处理一些可变的变量写请求。也和异步有关。
3.如果机器只有一个单核cpu,使用异步的方式不会提高性能。
4.如果程序产生写请求的速度比处理的速度快,那么任务队列将被写满。这时需要考虑优化appender的处理速度,或者减少写日志量。如果二者都行不通,考虑使用同步日志进行折中。