Exemple #1
0
        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
 });