public static async Task <IEnumerable <LogInfo> > PullLogs(ILogServiceClient client) { // 获取ShardId var listShardsResponse = await client.ListShardsAsync(LogStoreName); var listShardsResult = listShardsResponse.EnsureSuccess().Result; var shardId = listShardsResult.First().ShardId; // 获取游标 var getCursorRsponse = await client.GetCursorAsync(LogStoreName, shardId, "begin"); var getCursorResult = getCursorRsponse.EnsureSuccess().Result; var cursor = getCursorResult.Cursor; // 在指定分片(shard)上从游标(cursor)开始位置获取100条日志 var response = await client.PullLogsAsync(LogStoreName, shardId, cursor, 100); var result = response.EnsureSuccess().Result; // 获取Header上的下一条游标(cursor)位置 var nextCursor = response.GetLogCursor(); return(result.LogGroups .SelectMany(x => x.Logs)); }
/// <summary> /// 根据时间获得游标(cursor)。 /// </summary> /// <param name="client">client实例。</param> /// <param name="logstoreName">日志库名称</param> /// <param name="shardId">Shard ID</param> /// <param name="from">时间点(UNIX下秒数),或 begin,end</param> /// <param name="project">项目名,此参数将覆盖 client 中默认设置。</param> /// <returns>异步响应结果。</returns> /// <seealso cref="ILogServiceClient.GetCursorAsync"/> public static Task <IResponse <GetCursorResult> > GetCursorAsync(this ILogServiceClient client, String logstoreName, Int32 shardId, String from, String project = null) => client.GetCursorAsync(new GetCursorRequest(logstoreName, shardId, from) { ProjectName = project });