全部產品
Search
文件中心

Function Compute:日誌

更新時間:Jul 06, 2024

本文介紹如何在.NET運行環境下列印日誌和查看日誌。

列印日誌

函數向標準輸出stdout或標準錯誤stderr列印的內容會被收集到建立服務時指定的Logstore中。您可以使用fc-dotnet-lib庫提供的context.Logger方法列印日誌,也可以使用其他日誌庫列印日誌。

說明

推薦您使用context.Logger方法列印日誌,使用該方法列印的日誌自動包含RequestId,便於在出現錯誤的時候定位問題日誌。

使用context.Logger列印日誌

使用該方法列印的每條日誌中都包含時間、RequestId和記錄層級等資訊。範例程式碼如下所示。

using System.IO;
using System.Threading.Tasks;
using Aliyun.Serverless.Core;
using Microsoft.Extensions.Logging;

namespace Example
{
    public class Hello
    {
        public async Task<Stream> StreamHandler(Stream input, IFcContext context)
        {
            IFcLogger logger = context.Logger;
            logger.LogInformation("Handle request: {0}", context.RequestId);
            logger.LogInformation(string.Format("detail = {0} ", "hello world"));
            MemoryStream copy = new MemoryStream();
            await input.CopyToAsync(copy);
            copy.Seek(0, SeekOrigin.Begin);
            return copy;
        }

        static void Main(string[] args){}
    }
}

執行上面的範例程式碼,輸出的日誌內容如下。

2022-10-09T07:20:31.024Z 9666a77e-65e7-42a9-b011-************ [INFO] detail = hello world

改變記錄層級

您可以通過改變Logger的Property EnabledLogLevel改變記錄層級,記錄層級從高到低排列如下。

記錄層級

Level

介面

Critical

5

context.Logger.LogCritical

Error

4

context.Logger.LogError

Warning

3

context.Logger.LogWarning

Information

2

context.Logger.LogInformation

Debug

1

context.Logger.LogDebug

Trace

0

context.Logger.LogTrace

關於記錄層級的更多資訊, 請參見LogLevel Enum

範例程式碼如下所示。

using System.IO;
using System.Threading.Tasks;
using Aliyun.Serverless.Core;
using Microsoft.Extensions.Logging;

namespace Example
{
    public class Hello
    {
        public async Task<Stream> StreamHandler(Stream input, IFcContext context)
        {
            IFcLogger logger = context.Logger;

            // 列印大於Error層級的日誌資訊
            logger.EnabledLogLevel = LogLevel.Error;
            logger.LogError("console error 1");
            logger.LogInformation("console info 1");
            logger.LogWarning("console warn 1");
            logger.LogDebug("console debug 1");

            // 列印大於Warning層級的日誌資訊
            logger.EnabledLogLevel = LogLevel.Warning;
            logger.LogError("console error 2");
            logger.LogInformation("console info 2");
            logger.LogWarning("console warn 2");
            logger.LogDebug("console debug 2");

            // 列印大於Information層級的日誌資訊
            logger.EnabledLogLevel = LogLevel.Information;
            logger.LogInformation("Handle request: {0}", context.RequestId);

            MemoryStream copy = new MemoryStream();
            await input.CopyToAsync(copy);
            copy.Seek(0, SeekOrigin.Begin);
            return copy;
        }

        static void Main(string[] args){}
    }
}

執行以上代碼輸出的日誌內容如下所示。

2022-10-09T07:31:42.644Z 77b8ed17-6760-4877-8a43-b79189****** [ERROR] console error 1
2022-10-09T07:31:42.644Z 77b8ed17-6760-4877-8a43-b79189****** [ERROR] console error 2
2022-10-09T07:31:42.644Z 77b8ed17-6760-4877-8a43-b79189****** [WARNING] console warn 2
2022-10-09T07:31:42.644Z 77b8ed17-6760-4877-8a43-b79189****** [INFO] Handle request: 77b8ed17-6760-4877-8a43-b79189******          

查看日誌

函數執行完成後,您可以在函數詳情頁的調用日誌頁簽查看日誌資訊。具體操作和說明,請參見查看調用日誌