Function Compute は、Node.js 関数から出力されたすべての stdout を、サービス作成時に設定した Simple Log Service (SLS) の Logstore に転送します。ログを使用して、問題のデバッグ、リクエスト実行のトレース、関数パフォーマンスのモニターを行います。
仕組み
stdout への書き込みには、以下の 3 つのメソッドが利用可能です。それぞれ異なる出力フォーマットになります。
| メソッド | ログレベル | 出力フォーマット |
|---|---|---|
process.stdout.write | (なし) | 書き込まれた文字列をそのまま出力 |
console.log | silly | タイムスタンプ + リクエスト ID + ログレベル + メッセージ |
context.logger | 設定可能(info、warn、error など) | タイムスタンプ + リクエスト ID + ログレベル + メッセージ |
ログの出力
以下の例では、1 つのハンドラ内で上記の 3 つのメソッドすべてを示しています。プロジェクトの構成に応じて、ECMAScript モジュール(ESM)または CommonJS(CJS)を選択してください。
ESM ハンドラ
注: ESM 構文には Node.js 18 以降が必要です。
export const handler = async (event, context) => {
process.stdout.write('hi,fc\n');
console.log('hello,world');
context.logger.info('hello,fc');
return "Hello World!";
};CJS ハンドラ
'use strict';
exports.handler = (event, context, callback) => {
process.stdout.write('hi,fc\n');
console.log('hello,world');
context.logger.info('hello,fc');
callback(null, 'hello,world');
};ログ出力フォーマット
process.stdout.write
指定された文字列をそのまま書き込みます。タイムスタンプ、リクエスト ID、ログレベルは追加されません。
hi,fc出力フォーマットを完全制御したい場合や、追加フィールドによって破損する可能性のある構造化データを書き込む場合は、このメソッドを使用します。
console.log
メッセージの先頭に、タイムスタンプ、リクエスト ID、および silly ログレベルが付加されます。
2023-04-01T10:04:19.024Z 19b394a3-4fff-480c-9b5c-cbdfd6952f4e [silly] hello,world| フィールド | 例 |
|---|---|
| タイムスタンプ | 2023-04-01T10:04:19.024Z |
| リクエスト ID | 19b394a3-4fff-480c-9b5c-cbdfd6952f4e |
| ログレベル | silly |
| メッセージ | hello,world |
context.logger
console.log と同じタイムスタンプ + リクエスト ID + ログレベル形式で出力されますが、指定したログレベルを使用します。
2023-04-01T10:04:19.024Z 19b394a3-4fff-480c-9b5c-cbdfd6952f4e [info] hello,fcインスタンスの同時実行数が 1 より大きい場合、1 つの関数インスタンスが複数のリクエストを同時に処理します。このようなケースでは context.logger を使用してください。各ログエントリには個別のリクエスト ID が付与されるため、特定の関数呼び出しの出力をリクエスト ID でフィルターして分離できます。
ログの確認
関数実行後、関数詳細ページの ログ タブでログを確認できます。詳細については、「関数呼び出しログの確認」をご参照ください。
高同時実行環境で特定の関数呼び出しに該当するログを分離するには、context.logger または console.log の出力に含まれるリクエスト ID でフィルターをかけます。