/// <summary>
 /// 在 Project 下创建日志配置。
 /// </summary>
 /// <param name="client">client实例。</param>
 /// <param name="configName">日志配置名称, Project 下唯一。</param>
 /// <param name="inputType">输入类型,现在只支持 file。</param>
 /// <param name="inputDetail">输入详情。</param>
 /// <param name="outputType">输出类型,现在只支持 LogService。</param>
 /// <param name="outputDetail">输出详情。</param>
 /// <param name="logSample">Logtail 配置日志样例,最大支持 1000 字节。</param>
 /// <param name="project">项目名,此参数将覆盖 client 中默认设置。</param>
 /// <returns>异步响应结果。</returns>
 /// <seealso cref="ILogServiceClient.CreateConfigAsync"/>
 public static Task <IResponse> CreateConfigAsync(this ILogServiceClient client,
                                                  String configName, String inputType, ConfigInputDetailInfo inputDetail, String outputType, ConfigOutputDetailInfo outputDetail,
                                                  String logSample = null, String project = null)
 => client.CreateConfigAsync(new CreateConfigRequest(configName, inputType, inputDetail, outputType, outputDetail)
 {
     LogSample   = logSample,
     ProjectName = project
 });
 /// <summary>
 /// 在 Project 下创建日志配置。
 /// </summary>
 /// <param name="client">client实例。</param>
 /// <param name="configName">日志配置名称, Project 下唯一。</param>
 /// <param name="logstoreName"></param>
 /// <param name="logType">日志类型,现在只支持 common_reg_log。</param>
 /// <param name="logPath">日志所在的父目录,例如 /var/logs/。</param>
 /// <param name="filePattern">日志文件的Pattern,例如 access*.log。</param>
 /// <param name="localStorage">是否打开本地缓存,在服务端之间链路断开的情况下,本地可以缓存 1GB 日志。</param>
 /// <param name="timeFormat">日志时间格式, 如 %Y/%m/%d %H:%M:%S。</param>
 /// <param name="logBeginRegex">日志首行特征(正则表达式),由于匹配多行日志组成一条 log 的情况。</param>
 /// <param name="regex">日志对提取正则表达式。</param>
 /// <param name="key">日志提取后所生成的 Key。</param>
 /// <param name="filterKey">用于过滤日志所用到的 key,只有 key 的值满足对应 filterRegex 列中设定的正则表达式日志才是符合要求的。</param>
 /// <param name="filterRegex">和每个 filterKey 对应的正则表达式, filterRegex 的长度和 filterKey 的长度必须相同。</param>
 /// <param name="topicFormat">Topic 生成方式,支持以下四种类型:
 ///   <list type="bullet">
 ///     <item><description>用于将日志文件路径的某部分作为 topic,如 /var/log/(.*).log。</description></item>
 ///     <item><description>none,表示 topic 为空。</description></item>
 ///     <item><description>default,表示将日志文件路径作为 topic。</description></item>
 ///     <item><description>group_topic,表示将应用该配置的机器组 topic 属性作为 topic。</description></item>
 ///   </list>
 /// </param>
 /// <param name="preserve">true 代表监控目录永不超时,false 代表监控目录 30 分钟超时,默认值为 true。</param>
 /// <param name="preserveDepth">当设置 preserve 为 false 时,指定监控不超时目录的深度,最大深度支持 3。</param>
 /// <param name="fileEncoding">支持两种类型:utf8、gbk。</param>
 /// <param name="logSample">Logtail 配置日志样例,最大支持 1000 字节。</param>
 /// <param name="project">项目名,此参数将覆盖 client 中默认设置。</param>
 /// <returns>异步响应结果。</returns>
 /// <seealso cref="ILogServiceClient.CreateConfigAsync"/>
 public static Task <IResponse> CreateFileToLogServiceConfigAsync(this ILogServiceClient client,
                                                                  String configName, String logstoreName, String logType, String logPath, String filePattern, Boolean localStorage, String timeFormat, String logBeginRegex, String regex, IEnumerable <String> key, IEnumerable <String> filterKey, IEnumerable <String> filterRegex,
                                                                  String topicFormat = null, Boolean preserve = ConfigInputDetailInfo.DefaultPreserve, Int32 preserveDepth = default, String fileEncoding = null, String logSample = null, String project = null)
 => client.CreateConfigAsync(
     configName,
     "file",
     new ConfigInputDetailInfo(logType, logPath, filePattern, localStorage, timeFormat, logBeginRegex, regex, key, filterKey, filterRegex)
 {
     TopicFormat   = topicFormat,
     Preserve      = preserve,
     PreserveDepth = preserveDepth,
     FileEncoding  = fileEncoding
 },
     "LogService",
     new ConfigOutputDetailInfo(logstoreName),
     logSample,
     project);