全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
日志服务

.NET SDK

更新时间:2017-11-27 11:22:27

日志服务的 .NET SDK让Windows 平台上的开发人员可以非常方便地使用 .NET 平台操作阿里云日志服务。目前,SDK 支持 .NET Framework 3.5/4.0/4.5 版本。尽管针对不同 .NET Framework 版本的 SDK 文件不同,但是其接口和实现功能完全一致。

下载地址

该 SDK GitHub 地址如下:

https://github.com/aliyun/aliyun-log-csharp-sdk

操作步骤

为快速开始使用 .NET SDK,请按照如下步骤进行。

步骤 1 创建阿里云账号

具体方法请参考 阿里云账号注册流程

为了更好地使用阿里云服务,建议尽快完成实名认证,否则部分阿里云服务将无法使用。具体实名认证流程,请参考 这里

步骤 2 获取阿里云访问密钥

为了使用 Log Service .NET SDK,您必须申请阿里云的 访问密钥

登录阿里云 密钥管理页面。选择一对用于 SDK 的访问密钥对。如果没有,请创建一对新访问密钥,且保证它处于启用状态。有关如何创建访问密钥,参见 创建访问密钥

该密钥对会在下面的步骤使用,且需要保管好,不能对外泄露。另外,您可以参考 SDK 配置 了解更多 SDK 如何使用访问密钥的信息。

步骤 3 创建日志服务项目和日志库

在使用日志服务.NET SDK之前,请先在控制台上创建好项目(Project)和日志库(Logstore)。

有关如何创建项目和日志库,参见 创建项目创建日志库

注意:

  • 请确保使用同一阿里云账号获取阿里云访问密钥和创建日志项目及日志库。
  • 关于日志的项目、日志库等概念请参考 Log 核心概念
  • Log 的 project 名称为日志服务全局唯一,而 logstore 名称在一个 project 下面唯一。
  • Log 的 project 一旦创建则无法更改它的所属区域。目前也不支持在不同阿里云 Region 间迁移 Log project。

步骤 4 安装 .NET 开发环境

目前,日志服务 SDK 支持 .NET 3.5 和 .NET 4.0/4.5 运行环境。为支持日志服务 SDK 开发,建议安装:

  • Microsoft .NET Framework 3.5/4.0/4.5 (具体版本依赖于您的程序需要运行的目标环境)
  • Visual Studio 2010 及其以后版本

步骤 5 下载并安装日志服务 .NET SDK

搭建好 .NET 开发环境后,您需要安装日志服务的 .NET SDK。具体如下:

  1. 下载
  2. 解压完整下载的包到指定的目录即可。日志服务 .NET SDK 是一个软件开发包,不需要额外的安装操作。您可以按照下面的步骤直接在自己的 Visual Studio 项目中使用

步骤 6 开始一个新的日志服务 .NET 项目

安装好 .NET 开发环境及日志服务 .NET SDK 后,您就可以开始创建日志服务的 .NET 项目。这里以一个 C# 的 Console 程序(netsdksample45)为例说明整个过程(其他 .NET 语言和程序类型的使用方式类似):

  1. 启动 Visual Studio 并创建一个 C# 的 Console 应用程序。命名为 netsdksample45。

  2. 右键单击新创建的项目,选择 项目属性(Properties) 菜单项进入项目属性页。然后选择 应用程序(Application) 标签页,单击 目标框架(Target Framework) 的下拉框,选中合适的 .NET Framework 目标版本(如下图)。目前日志服务 SDK 仅支持 .NET Framework 3.5/4.0/4.5 三个版本,所以请选择这三个版本中的一个。这里假设选择 .NET Framework 4.5。

  3. 右键单击新建项目的 依赖模块(References)子目录,选择 添加依赖(Add Reference…)并添加下载 SDK 中的 SLSSDK.dll 文件(如下图)为项目依赖。需要注意的是您必须选择正确版本的 SLSSDK.dll 文件。如果您的程序目标平台为 .NET Framework 4.0/4.5,请选择 SDK 下载包中 net40 子目录下的文件。如果您的程序目标平台为 .NET Framework 3.5,请选择 SDK 下载包中 net35 子目录下的文件。

  4. 如前进入 项目属性(Properties) 页,添加编译事件(Build Events)来拷贝 .NET SDK 自身所依赖的模块到程序输出路径,如下图所示:

    注意:

    • 日志服务 .NET SDK 需要依赖 zlib 库进行压缩处理,为了保证您的程序能够在 32 或者 64 位平台运行,请确保上图中的两个文件都被拷贝到您的程序输出路径,且它们要随您的最终应用程序发布。
    • 具体拷贝的 zlib 库源路径需要依你机器上的路径,请参考上图命令进行适当修改。
  5. 利用日志服务 SDK 接口访问阿里云日志服务。运行如下示例即可与日志服务端交互并得到相应输出。

  1. using System;
  2. using System.Collections.Generic;
  3. using Aliyun.Api.SLS;
  4. using Aliyun.Api.SLS.Request;
  5. using Aliyun.Api.SLS.Response;
  6. using Aliyun.Api.SLS.Data;
  7. namespace netsdksample45
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. String endpoint = "<endpoint>"; //选择与上面步骤创建 project 所属区域匹配的日志服务 Endpoint
  14. String accessKeyId = "<your_access_key_id>"; //使用你的阿里云访问秘钥 AccessKeyId
  15. String accessKeySecret = "<your_access_key_secret>"; //使用你的阿里云访问秘钥 AccessKeySecret
  16. String project = "<project_name>"; //上面步骤创建的项目名称
  17. String logstore = "<logstore_name>"; //上面步骤创建的日志库名称
  18. //构建一个客户端实例
  19. SLSClient client = new SLSClient(endpoint, accessKeyId, accessKeySecret);
  20. //列出当前 project 下的所有日志库名称
  21. ListLogstoresResponse res1 = client.ListLogstores(new ListLogstoresRequest(project));
  22. Console.WriteLine("Totoal logstore number is " + res1.Count);
  23. foreach (String name in res1.Logstores)
  24. {
  25. Console.WriteLine(name);
  26. }
  27. DateTime unixTimestampZeroPoint = new DateTime(1970, 01, 01, 0, 0, 0,DateTimeKind.Utc);
  28. //写入日志
  29. List<LogItem> logs = new List<LogItem>();
  30. for (int i = 0; i < 5; i++)
  31. {
  32. LogItem item = new LogItem();
  33. item.Time = (uint)((DateTime.UtcNow - unixTimestampZeroPoint).TotalSeconds);
  34. item.PushBack("index", i.ToString());
  35. logs.Add(item);
  36. }
  37. String topic = String.Empty; //选择合适的日志主题
  38. String source = "localhost"; //选择合适的日志来源(如 IP 地址)
  39. PutLogsResponse res4 = client.PutLogs(new PutLogsRequest(project, logstore, topic, source, logs));
  40. Console.WriteLine("Request ID for PutLogs: " + res4.GetRequestId());
  41. //等待 1 分钟让日志可查询
  42. System.Threading.Thread.Sleep(60 * 1000);
  43. //查询日志分布情况
  44. DateTime fromStamp = DateTime.UtcNow - new TimeSpan(0, 10, 0);
  45. DateTime toStamp = DateTime.UtcNow;
  46. uint from = (uint)((fromStamp - unixTimestampZeroPoint).TotalSeconds);
  47. uint to = (uint)((toStamp - unixTimestampZeroPoint).TotalSeconds);
  48. GetHistogramsResponse res2 = null;
  49. do
  50. {
  51. res2 = client.GetHistograms(new GetHistogramsRequest(project, logstore, from, to));
  52. } while ((res2 != null) && (!res2.IsCompleted()));
  53. Console.WriteLine("Total count of logs is " + res2.TotalCount);
  54. foreach (Histogram ht in res2.Histograms)
  55. {
  56. Console.WriteLine(String.Format("from {0}, to {1}, count {2}.", ht.From, ht.To, ht.Count));
  57. }
  58. //查询日志数据
  59. GetLogsResponse res3 = null;
  60. do
  61. {
  62. res3 = client.GetLogs(new GetLogsRequest(project, logstore, from, to, String.Empty, String.Empty, 5, 0, true));
  63. } while ((res3 != null) && (!res3.IsCompleted()));
  64. Console.WriteLine("Have gotten logs...");
  65. foreach(QueriedLog log in res3.Logs)
  66. {
  67. Console.WriteLine("----{0}, {1}---", log.Time, log.Source);
  68. for(int i = 0; i < log.Contents.Count; i++)
  69. {
  70. Console.WriteLine("{0} --> {1}", log.Contents[i].Key, log.Contents[i].Value);
  71. }
  72. }
  73. }
  74. }
  75. }
本文导读目录