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> /// 根据游标、数量获得日志。获得日志时必须指定 shard。 /// 如果在 storm 等情况下可以通过 LoghubClientLib 进行选举与协同消费。 /// 目前仅支持读取 PB 格式 LogGroupList 数据。 /// </summary> /// <param name="client">client实例。</param> /// <param name="logstoreName">日志库名称</param> /// <param name="shardId">Shard ID</param> /// <param name="cursor">游标,用以表示从什么位置开始读取数据,相当于起点。</param> /// <param name="count">返回的 loggroup 数目,范围为 0~1000。</param> /// <param name="project">项目名,此参数将覆盖 client 中默认设置。</param> /// <returns>异步响应结果。</returns> /// <seealso cref="ILogServiceClient.PullLogsAsync"/> public static Task <IResponse <PullLogsResult> > PullLogsAsync(this ILogServiceClient client, String logstoreName, Int32 shardId, String cursor, Int32 count, String project = null) => client.PullLogsAsync(new PullLogsRequest(logstoreName, shardId, cursor, count) { ProjectName = project });