假设我使用logger.info
记录两个事件,其中logger
被声明为private static Logger logger = LoggerFactory.getLogger(SomeClass.class);
,并且这两个事件的间隔小于1毫秒。
我想知道后一个事件(即稍后记录器的事件)是否总是在存储的RollingFileAppender
中的前一个事件之后?我将ch.qos.logback.core.rolling.TimeBasedRollingPolicy
与AsyncAppender
一起使用。
答案 0 :(得分:3)
AsyncAppender
使用BlockingQueue
实施。 Logger
将向队列添加日志记录事件,并且单个工作程序Thread
将从队列中获取并处理日志记录。
如果您的代码按时间顺序(通过锁定或其他机制)保证这些顺序,那么它们也可以保证在日志中订购。
答案 1 :(得分:1)
如果您使用相同的记录器实例编写多个线程,则无法保证订购。
查看logback Logger implementation
此方法内没有同步。 thread1可能会调用logger.info(“1”),片刻之后thread2会调用logger.info(“2”),但是appender会在“1”之前收到“2”。
如果您需要订购保证,您必须自己同步调用logger.info()。