Topik ini menjelaskan cara mencetak dan melihat log di lingkungan .NET.
Cetak log
Konten yang dicetak oleh fungsi ke keluaran standar (stdout) atau kesalahan standar (stderr) dikumpulkan dalam penyimpanan log yang Anda tentukan saat membuat layanan. Anda dapat menggunakan metode context.Logger dari pustaka fc-dotnet-lib untuk mencetak log, atau menggunakan pustaka pencatatan log lainnya.
Gunakan metode context.Logger untuk mencetak log. Log yang dihasilkan secara otomatis menyertakan RequestId, sehingga memudahkan Anda menemukan log tertentu saat terjadi kesalahan.
Gunakan context.Logger untuk mencetak log
Setiap log yang dicetak dengan metode ini mencakup informasi seperti waktu, RequestId, dan tingkat log. Kode berikut memberikan contohnya.
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){}
}
}Menjalankan kode contoh menghasilkan output log berikut.
2022-10-09T07:20:31.024Z 9666a77e-65e7-42a9-b011-************ [INFO] detail = hello worldUbah tingkat log
Ubah tingkat log dengan memodifikasi properti EnabledLogLevel pada logger. Tingkat log berikut disusun berdasarkan prioritas dari yang tertinggi ke terendah.
Tingkat log | Level | Antarmuka |
Critical | 5 |
|
Error | 4 |
|
Warning | 3 |
|
Information | 2 |
|
Debug | 1 |
|
Trace | 0 |
|
Untuk informasi selengkapnya tentang tingkat log, lihat LogLevel Enum.
Kode berikut memberikan contohnya.
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;
// Cetak pesan log dengan level Error atau lebih tinggi.
logger.EnabledLogLevel = LogLevel.Error;
logger.LogError("console error 1");
logger.LogInformation("console info 1");
logger.LogWarning("console warn 1");
logger.LogDebug("console debug 1");
// Cetak pesan log dengan level Warning atau lebih tinggi.
logger.EnabledLogLevel = LogLevel.Warning;
logger.LogError("console error 2");
logger.LogInformation("console info 2");
logger.LogWarning("console warn 2");
logger.LogDebug("console debug 2");
// Cetak pesan log dengan level Information atau lebih tinggi.
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){}
}
}Menjalankan kode tersebut menghasilkan output log berikut.
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****** Lihat log
Setelah fungsi dijalankan, lihat log pada tab Invocation Log di halaman detail fungsi. Untuk informasi selengkapnya, lihat View invocation logs.