Java 使用AsyncAppender的logback日志存储是否保证按时间顺序?
假设我使用Java 使用AsyncAppender的logback日志存储是否保证按时间顺序?,java,logging,slf4j,logback,Java,Logging,Slf4j,Logback,假设我使用logger.info记录两个事件,其中logger声明为private static logger logger=LoggerFactory.getLogger(SomeClass.class),两个事件之间的间隔小于1毫秒 我想知道存储的RollingFileAppender中,后一个事件(即稍后记录的事件)是否总是在前一个事件之后出现?我正在使用ch.qos.logback.core.rolling.TimeBasedRollingPolicy和AsyncAppender异步Ap
logger.info
记录两个事件,其中logger
声明为private static logger logger=LoggerFactory.getLogger(SomeClass.class)代码>,两个事件之间的间隔小于1毫秒
我想知道存储的RollingFileAppender
中,后一个事件(即稍后记录的事件)是否总是在前一个事件之后出现?我正在使用ch.qos.logback.core.rolling.TimeBasedRollingPolicy
和AsyncAppender异步Appender
是通过阻塞队列实现的。记录器
将向队列中添加日志事件,单个工作线程
将从队列中获取日志并处理日志记录
如果您的代码按时间顺序(通过锁定或某些其他机制)保证了它们的顺序,那么它们也保证在日志中排序。异步附加器
是通过阻塞队列
实现的。记录器
将向队列中添加日志事件,单个工作线程将从队列中获取日志并处理日志记录
如果您的代码按时间顺序(通过锁定或其他机制)保证这些日志的顺序,那么它们也保证在日志中进行排序。如果您有多个线程使用同一个记录器实例进行写入,则无法保证排序 看一看 此方法中没有同步。thread1可能会调用logger.info(“1”),稍后thread2会调用logger.info(“2”),但追加器将在“1”之前收到“2”
如果您需要订购保证,您必须自己同步对logger.info()的调用。如果您有多个线程使用同一个logger实例进行写入,则无法保证订购 看一看 此方法中没有同步。thread1可能会调用logger.info(“1”),稍后thread2会调用logger.info(“2”),但追加器将在“1”之前收到“2”
如果你需要一个订购保证,你必须同步调用LoGr.Ifor()自己。
你认为后者是哪一个,你认为前者是哪一个?你怎么知道呢?@SotiriosDelimanolis后一个是物理时间稍后的一个。代码保证按时间顺序排列。我想知道存储的日志是否必须反映这个物理现实。你认为后者是哪一个,你认为前者是什么?你怎么知道呢?@SotiriosDelimanolis后一个是物理时间稍后的一个。代码保证按时间顺序排列。我想知道存储的日志是否必须反映这一物理现实。如果您在logback Logger实现本身中获取了一个战利品,则无法保证在那里订购。当一个记录器在多个线程之间共享时,不能保证日志事件的创建顺序与对logger.info()的调用相同method@kopytko这就是为什么我说如果代码保证它。假设日志代码位于已锁定的关键部分内,则保证日志事件按顺序放入队列中。而且,由于有一个线程从队列中获取,它也将获取该线程并按顺序记录。如果您在logback Logger实现本身获取了一个loot,则无法保证在那里进行排序。当一个记录器在多个线程之间共享时,不能保证日志事件的创建顺序与对logger.info()的调用相同method@kopytko这就是为什么我说如果代码保证它。假设日志代码位于已锁定的关键部分内,则保证日志事件按顺序放入队列中。由于有一个线程从队列中获取数据,它也会获取数据并按顺序记录。