すべてのプロダクト
Search
ドキュメントセンター

Function Compute:ログ管理

最終更新日:Sep 02, 2024

このトピックでは、でログを印刷および表示する方法について説明します。. NETランタイム環境

ログの印刷

関数によって標準出力 (stdout) または標準エラー (stderr) に出力されたログは、サービスの作成時に指定したSimple Log Service Logstoreに収集されます。 fc-dotnet-libライブラリで提供されるcontext.Loggerメソッドを使用して、ログを印刷できます。 他のログライブラリを使用してログを印刷することもできます。

説明

context.Loggerメソッドを使用してログを印刷することを推奨します。 この方法を使用して印刷されるログには、エラーのトラブルシューティングに役立つリクエストIDが含まれています。

context.Loggerを使用してログを印刷する

この方法を使用してログを印刷する場合、各ログには時間、リクエストID、ログレベルなどの情報が含まれます。 以下にコードの例を示します。

System.IOを使用した

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

ログレベルの変更

ロガーのEnabledLogLevelプロパティを変更して、印刷するログのレベルを変更できます。 次の表に、ログレベルを重大度の降順で示します。

ログレベル

レベル

API操作

クリティカル

5

context.Logger.LogCritical

エラー

4

context.Logger.LogError

警告

3

context.Logger.LogWarning

情報

2

context.Logger.LogInformation

デバッグ

1

context.Logger.LogDebug

トレース

0

context.Logger.LogTrace

ログレベルの詳細については、「LogLevel Enum」をご参照ください。

以下にコードの例を示します。

System.IOを使用した

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;

            // Print logs of the Error level and above. 
            logger.EnabledLogLevel = LogLevel.Error;
            logger.LogError("console error 1");
            logger.LogInformation("console info 1");
            logger.LogWarning("console warn 1");
            logger.LogDebug("console debug 1");

            // Print logs of the Warning level and above. 
            logger.EnabledLogLevel = LogLevel.Warning;
            logger.LogError("console error 2");
            logger.LogInformation("console info 2");
            logger.LogWarning("console warn 2");
            logger.LogDebug("console debug 2");

            // Print logs of the Information level and above. 
            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******          

ログの表示

関数の実行後、関数の詳細ページの [ログ] タブでログを表示できます。 詳細については、「関数呼び出しログの表示」をご参照ください。