全部產品
Search
文件中心

Simple Log Service:.NET Core SDK快速入門

更新時間:Aug 07, 2024

本文介紹如何快速使用Log Service.NET Core SDK完成常見操作,包括建立專案(Project)、建立日誌庫(Logstore)、寫入日誌和查詢日誌等。

前提條件

  • 已建立RAM使用者並完成授權。具體操作,請參見建立RAM使用者並完成授權

  • 已配置環境變數ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET。具體操作,請參見在Linux、macOS和Windows系統配置環境變數

    重要
    • 阿里雲帳號的AccessKey擁有所有API的存取權限,建議您使用RAM使用者的AccessKey進行API訪問或日常營運。

    • 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。

  • 已完成.NET Core SDK安裝。更多資訊,請參見安裝.NET Core SDK.

範例程式碼

本樣本中,建立一個SLSQuickStart.cs檔案,並調用介面分別完成建立Project、建立Logstore、建立索引、寫入日誌資料和查詢日誌資料。樣本如下:

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Aliyun.Api.LogService;
using Aliyun.Api.LogService.Domain.Log;
using Aliyun.Api.LogService.Domain.LogStore.Index;
using Aliyun.Api.LogService.Infrastructure.Protocol;

namespace Test
{
    class SLSQuickStart
    {
        // Log Service的服務存取點。此處以杭州為例,其它地區請根據實際情況填寫。
        private static string endpoint = "cn-hangzhou.log.aliyuncs.com";
        // 本樣本從環境變數中擷取AccessKey ID和AccessKey Secret。
        private static string accessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID");
        private static string accessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // Project名稱。
        private static string project = "aliyun-test-project";
        // Logstore名稱。
        private static string logstore = "aliyun-test-logstore";
        // 建立Log ServiceClient。
        private static ILogServiceClient client = BuildSimpleClient();

        static async Task Main(string[] args)
        {
            // 建立Project。
            var proRes = await client.CreateProjectAsync(project, "des");
            check(proRes);
            Console.WriteLine("Create project success");
            Thread.Sleep(120 * 1000);
            
            // 建立Logstore。
            var storeRes = await client.CreateLogStoreAsync(logstore, 3, 2);
            check(storeRes);
            Console.WriteLine("Create logstore success");
            Thread.Sleep(10 * 1000);
            
            // 為Logstore建立索引。
            var indRes = await client.CreateIndexAsync(logstore, new IndexLineInfo(new[] {' ', ','}));
            check(indRes);
            Console.WriteLine("Create Index success");
            Thread.Sleep(60 * 1000);

            // 向Logstore寫入資料。
            await PostLogs();
            Console.WriteLine("Post logs success");
            Thread.Sleep(3000);
            // 查詢日誌。
            await GetLogs();
        }

        public static async Task GetLogs()
        {
            var logsRes = await client.GetLogsAsync(logstore, DateTimeOffset.UtcNow.AddMinutes(-1),
                DateTimeOffset.UtcNow,
                "test", "", 100, 0);
            check(logsRes);
            foreach (var log in logsRes.Result.Logs)
            {
                foreach (var key in log.Keys)
                {
                    log.TryGetValue(key, out var value);
                    Console.WriteLine(key + " : " + value);
                }

                Console.WriteLine("======");
            }
        }

        public static async Task PostLogs()
        {
            for (int i = 0; i < 10; i++)
            {
                var response = await client.PostLogStoreLogsAsync(logstore, new LogGroupInfo
                {
                    Topic = "test",
                    Source = "127.0.0.1",
                    LogTags = new Dictionary<String, String>
                    {
                        {"Tag1", "t1"},
                        {"Tag2", String.Empty},
                        {"Tag3", "t3"}
                    },
                    Logs = new List<LogInfo>
                    {
                        new LogInfo
                        {
                            Time = DateTimeOffset.Now,
                            Contents = new Dictionary<String, String>
                            {
                                {"name", "zs"},
                                {"age", "18"},
                                {"address", String.Empty}
                            }
                        }
                    }
                });
                check(response);
            }
        }

        public static ILogServiceClient BuildSimpleClient()
            => LogServiceClientBuilders.HttpBuilder
                .Endpoint(endpoint, project)
                .Credential(accessKeyId, accessKeySecret)
                .Build();

        public static void check(IResponse res)
        {
            if (!res.IsSuccess)
            {
                throw new ApplicationException(res.Error.ErrorMessage);
            }
        }
    }
}

更多範例程式碼,請參見Aliyun Log .NET Core SDK

返回結果

返回結果樣本如下:

Create project success
Create logstore success
Create Index success
Post logs success
name : zs
age : 18
address :
__topic__ : test
__source__ : 127.0.0.1
__tag__:Tag1 : t1
__tag__:Tag2 :
__tag__:Tag3 : t3
__time__ : 1721728435
======
......