このトピックでは、でログを印刷および表示する方法について説明します。. 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 |
|
エラー | 4 |
|
警告 | 3 |
|
情報 | 2 |
|
デバッグ | 1 |
|
トレース | 0 |
|
ログレベルの詳細については、「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******
ログの表示
関数の実行後、関数の詳細ページの [ログ] タブでログを表示できます。 詳細については、「関数呼び出しログの表示」をご参照ください。