Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用AsyncAppender的logback日志存储是否保证按时间顺序?_Java_Logging_Slf4j_Logback - Fatal编程技术网

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这就是为什么我说如果代码保证它。假设日志代码位于已锁定的关键部分内,则保证日志事件按顺序放入队列中。由于有一个线程从队列中获取数据,它也会获取数据并按顺序记录。