记录一下最近做的一个Web项目中的日志问题
项目使用的日志体系如下:使用sl4j作为门面,log的实际实现是log4j
问题如下:
在请求高并发的情况下,推测日志会出现串的情况。
举个例子:
public void echo() {
log.info("Function begin");
//...省略若干行代码...
log.info("Function running");
//...省略若干行代码...
log.info("Function end");
}
如果多个请求调用方法echo,最终的输出情况可能如下
Thread-1: Function begin
Thread-2: Function begin
Thread-3: Function begin
Thread-3: Function running
Thread-1: Function running
Thread-1: Function end
Thread-2: Function running
Thread-3: Function end
Thread-2: Function end
不同线程输出的日志会串到一起,很乱
网上查找资料,很少有提这一块的。基本上都是log4j2的异步输出
可是log4j2的异步输出只是先放到buf中,buf满了再一次输出。提高的是写的性能,向buf中加入的顺序仍不能保