View a markdown version of this page

Log dan pantau fungsi Java Lambda - AWS Lambda

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Log dan pantau fungsi Java Lambda

AWS Lambda secara otomatis memonitor fungsi Lambda dan mengirimkan entri log ke Amazon CloudWatch. Fungsi Lambda Anda dilengkapi dengan grup CloudWatch log log dan aliran log untuk setiap instance fungsi Anda. Lingkungan runtime Lambda mengirimkan detail tentang setiap pemanggilan dan output lainnya dari kode fungsi Anda ke aliran log. Untuk informasi selengkapnya tentang CloudWatch Log, lihatMengirim log fungsi Lambda ke CloudWatch Log.

Untuk menampilkan log dari kode fungsi Anda, Anda dapat menggunakan metode di java.lang.System, atau modul logging apa pun yang menulis ke stdout atau stderr.

Membuat fungsi yang mengembalikan log

Untuk menghasilkan log dari kode fungsi, Anda dapat menggunakan metode di java.lang.System, atau modul pencatatan apa pun yang menulis ke stdout atau stderr. Pustaka aws-lambda-java-core menyediakan kelas logger bernama LambdaLogger yang dapat Anda akses dari objek konteks. Kelas logger mendukung log beberapa baris.

Contoh berikut menggunakan logger LambdaLogger yang disediakan oleh objek konteks.

contoh Handler.java
// Handler value: example.Handler public class Handler implements RequestHandler<Object, String>{ Gson gson = new GsonBuilder().setPrettyPrinting().create(); @Override public String handleRequest(Object event, Context context) { LambdaLogger logger = context.getLogger(); String response = new String("SUCCESS"); // log execution details logger.log("ENVIRONMENT VARIABLES: " + gson.toJson(System.getenv())); logger.log("CONTEXT: " + gson.toJson(context)); // process event logger.log("EVENT: " + gson.toJson(event)); return response; } }
contoh format log
START RequestId: 6bc28136-xmpl-4365-b021-0ce6b2e64ab0 Version: $LATEST
ENVIRONMENT VARIABLES: 
{
    "_HANDLER": "example.Handler",
    "AWS_EXECUTION_ENV": "AWS_Lambda_java8",
    "AWS_LAMBDA_FUNCTION_MEMORY_SIZE": "512",
    ...
}
CONTEXT: 
{
    "memoryLimit": 512,
    "awsRequestId": "6bc28136-xmpl-4365-b021-0ce6b2e64ab0",
    "functionName": "java-console",
    ...
}
EVENT:
{
  "records": [
    {
      "messageId": "19dd0b57-xmpl-4ac1-bd88-01bbb068cb78",
      "receiptHandle": "MessageReceiptHandle",
      "body": "Hello from SQS!",
       ...
    }
  ]
}
END RequestId: 6bc28136-xmpl-4365-b021-0ce6b2e64ab0
REPORT RequestId: 6bc28136-xmpl-4365-b021-0ce6b2e64ab0	Duration: 198.50 ms	Billed Duration: 724 ms	Memory Size: 512 MB	Max Memory Used: 90 MB	Init Duration: 524.75 ms

Runtime Java mencatat baris START, END, dan REPORT untuk setiap invokasi. Baris laporan memberikan detail berikut:

Bidang data baris LAPORAN
  • RequestId – ID permintaan unik untuk invokasi.

  • Durasi – Jumlah waktu yang digunakan oleh metode handler fungsi Anda gunakan untuk memproses peristiwa.

  • Durasi yang Ditagih – Jumlah waktu yang ditagihkan untuk invokasi.

  • Ukuran Memori – Jumlah memori yang dialokasikan untuk fungsi.

  • Memori Maks yang Digunakan – Jumlah memori yang digunakan oleh fungsi. Ketika pemanggilan berbagi lingkungan eksekusi, Lambda melaporkan memori maksimum yang digunakan di semua pemanggilan. Perilaku ini dapat menghasilkan nilai yang dilaporkan lebih tinggi dari yang diharapkan.

  • Durasi Init – Untuk permintaan pertama yang dilayani, lama waktu yang diperlukan runtime untuk memuat fungsi dan menjalankan kode di luar metode handler.

  • XRAY TraceId — Untuk permintaan yang dilacak, ID AWS X-Ray jejak.

  • SegmentId— Untuk permintaan yang dilacak, ID X-Ray segmen.

  • Diambil Sampel – Untuk permintaan yang dilacak, hasil pengambilan sampel.

Menggunakan kontrol logging lanjutan Lambda dengan Java

Untuk memberi Anda lebih banyak kontrol atas bagaimana log fungsi Anda ditangkap, diproses, dan dikonsumsi, Anda dapat mengonfigurasi opsi logging berikut untuk runtime Java yang didukung:

  • Format log - pilih antara teks biasa dan format JSON terstruktur untuk log fungsi Anda

  • Tingkat log - untuk log dalam format JSON, pilih tingkat detail log yang dikirim Lambda CloudWatch, seperti ERROR, DEBUG, atau INFO

  • Grup log - pilih grup CloudWatch log yang dikirimkan fungsi Anda log ke

Untuk informasi selengkapnya tentang opsi pencatatan ini, dan petunjuk tentang cara mengonfigurasi fungsi Anda untuk menggunakannya, lihatMengkonfigurasi kontrol logging lanjutan untuk fungsi Lambda.

Untuk menggunakan format log dan opsi tingkat log dengan fungsi Java Lambda Anda, lihat panduan di bagian berikut.

Menggunakan format log JSON terstruktur dengan Java

Jika Anda memilih JSON untuk format log fungsi Anda, Lambda mengirimkan output log menggunakan LambdaLogger kelas sebagai JSON terstruktur. Setiap objek log JSON berisi setidaknya empat pasangan nilai kunci dengan kunci berikut:

  • "timestamp"- waktu pesan log dihasilkan

  • "level"- tingkat log yang ditetapkan untuk pesan

  • "message"- isi pesan log

  • "AWSrequestId"- ID permintaan unik untuk pemanggilan fungsi

Tergantung pada metode logging yang Anda gunakan, output log dari fungsi Anda yang diambil dalam format JSON juga dapat berisi pasangan nilai kunci tambahan.

Untuk menetapkan level untuk log yang Anda buat menggunakan LambdaLogger logger, Anda perlu memberikan LogLevel argumen dalam perintah logging Anda seperti yang ditunjukkan dalam contoh berikut.

contoh Kode logging Java
LambdaLogger logger = context.getLogger(); logger.log("This is a debug log", LogLevel.DEBUG);

Output log ini dengan kode contoh ini akan ditangkap di CloudWatch Log sebagai berikut:

contoh Catatan log JSON
{ "timestamp":"2023-11-01T00:21:51.358Z", "level":"DEBUG", "message":"This is a debug log", "AWSrequestId":"93f25699-2cbf-4976-8f94-336a0aa98c6f" }

Jika Anda tidak menetapkan level ke output log Anda, Lambda secara otomatis menetapkan level INFO.

Jika kode Anda sudah menggunakan pustaka logging lain untuk menghasilkan log terstruktur JSON, Anda tidak perlu membuat perubahan apa pun. Lambda tidak mengkodekan ulang log apa pun yang sudah dikodekan JSON. Bahkan jika Anda mengonfigurasi fungsi Anda untuk menggunakan format log JSON, output logging Anda muncul CloudWatch dalam struktur JSON yang Anda tentukan.

Menggunakan penyaringan tingkat log dengan Java

AWS Lambda Untuk memfilter log aplikasi Anda sesuai dengan tingkat log mereka, fungsi Anda harus menggunakan log berformat JSON. Anda dapat mencapai ini dengan dua cara:

Saat mengonfigurasi fungsi untuk menggunakan penyaringan tingkat log, Anda harus memilih dari opsi berikut untuk tingkat log yang ingin Lambda kirim ke Log: CloudWatch

Tingkat log Penggunaan standar
TRACE (paling detail) Informasi paling halus yang digunakan untuk melacak jalur eksekusi kode Anda
DEBUG Informasi terperinci untuk debugging sistem
INFO Pesan yang merekam operasi normal fungsi Anda
WARN Pesan tentang potensi kesalahan yang dapat menyebabkan perilaku tak terduga jika tidak ditangani
ERROR Pesan tentang masalah yang mencegah kode berfungsi seperti yang diharapkan
FATAL (paling sedikit detail) Pesan tentang kesalahan serius yang menyebabkan aplikasi berhenti berfungsi

Agar Lambda dapat memfilter log fungsi Anda, Anda juga harus menyertakan pasangan nilai "timestamp" kunci dalam output log JSON Anda. Waktu harus ditentukan dalam format stempel waktu RFC 3339 yang valid. Jika Anda tidak memberikan stempel waktu yang valid, Lambda menetapkan log level INFO dan menambahkan stempel waktu untuk Anda.

Lambda mengirimkan log dari level yang dipilih dan lebih rendah ke CloudWatch. Misalnya, jika Anda mengonfigurasi level log WARN, Lambda mengirimkan log yang sesuai dengan level WARN, ERROR, dan FATAL.

Menerapkan logging lanjutan dengan Log4j2 dan SLF4J

catatan

AWS Lambda tidak menyertakan Log4j2 dalam runtime terkelola atau gambar wadah dasar. Oleh karena itu, ini tidak terpengaruh oleh masalah yang dijelaskan dalam CVE-2021-44228, CVE-2021-45046, dan CVE-2021-45105.

Untuk kasus di mana fungsi pelanggan menyertakan versi Log4j2 yang terkena dampak, kami telah menerapkan perubahan pada runtime terkelola Lamb da Java dan gambar wadah dasar yang membantu mengurangi masalah di,, dan. CVE-2021-44228 CVE-2021-45046 CVE-2021-45105 Sebagai hasil dari perubahan ini, pelanggan yang menggunakan Log4J2 mungkin melihat entri log tambahan, mirip dengan "”. Transforming org/apache/logging/log4j/core/lookup/JndiLookup (java.net.URLClassLoader@...) Setiap string log yang mereferensikan mapper jndi dalam output Log4J2 diganti dengan "”. Patched JndiLookup::lookup()

Terlepas dari perubahan ini, kami sangat mendorong semua pelanggan yang fungsinya termasuk Log4j2 untuk memperbarui ke versi terbaru. Secara khusus, pelanggan yang menggunakan pustaka aws-lambda-java-log4j2 dalam fungsi mereka harus memperbarui ke versi 1.5.0 (atau yang lebih baru), dan menerapkan kembali fungsinya. Versi ini memperbarui dependensi utilitas Log4j2 yang mendasarinya ke versi 2.17.0 (atau yang lebih baru). Biner aws-lambda-java-log4j2 yang diperbarui tersedia di repositori Maven dan kode sumbernya tersedia di Github. https://github.com/aws/aws-lambda-java-libs/tree/master/aws-lambda-java-log4j2

Terakhir, perhatikan bahwa pustaka apa pun yang terkait dengan aws-lambda-java-log4j (v1.0.0 atau 1.0.1) tidak boleh digunakan dalam keadaan apa pun. Perpustakaan ini terkait dengan versi 1.x dari log4j yang berakhir pada tahun 2015. Pustaka tidak didukung, tidak dipelihara, tidak ditambal, dan memiliki kerentanan keamanan yang diketahui.

Untuk menyesuaikan output log, mendukung logging selama pengujian unit, dan panggilan log AWS SDK, gunakan Apache Log4j2 dengan SLF4J. Log4j adalah pustaka logging untuk program Java yang dapat Anda gunakan untuk mengkonfigurasi level log dan menggunakan pustaka appender. SLF4J adalah pustaka fasad yang dapat Anda gunakan untuk mengubah pustaka mana yang Anda gunakan tanpa mengubah kode fungsi Anda.

Untuk menambahkan ID permintaan ke log fungsi Anda, gunakan appender di pustaka aws-lambda-java-log4j2.

contoh src/main/resources/log4j2.xml — Konfigurasi Appender
<Configuration> <Appenders> <Lambda name="Lambda" format="${env:AWS_LAMBDA_LOG_FORMAT:-TEXT}"> <LambdaTextFormat> <PatternLayout> <pattern>%d{yyyy-MM-dd HH:mm:ss} %X{AWSRequestId} %-5p %c{1} - %m%n </pattern> </PatternLayout> </LambdaTextFormat> <LambdaJSONFormat> <JsonTemplateLayout eventTemplateUri="classpath:LambdaLayout.json" /> </LambdaJSONFormat> </Lambda> </Appenders> <Loggers> <Root level="${env:AWS_LAMBDA_LOG_LEVEL:-INFO}"> <AppenderRef ref="Lambda"/> </Root> <Logger name="software.amazon.awssdk" level="WARN" /> <Logger name="software.amazon.awssdk.request" level="DEBUG" /> </Loggers> </Configuration>

Anda dapat memutuskan bagaimana log Log4j2 Anda dikonfigurasi untuk teks biasa atau output JSON dengan menentukan tata letak di bawah tag dan. <LambdaTextFormat> <LambdaJSONFormat>

Dalam contoh ini, dalam mode teks, setiap baris diawali dengan tanggal, waktu, ID permintaan, tingkat log, dan nama kelas. Dalam mode JSON, <JsonTemplateLayout> digunakan dengan konfigurasi yang dikirimkan bersama dengan per aws-lambda-java-log4j2 pustakaan.

SLF4J adalah pustaka fasad untuk login ke kode Java. Dalam kode fungsi Anda, Anda menggunakan pabrik logger SLF4J untuk mengambil logger dengan metode untuk tingkat log seperti info() dan warn(). Dalam konfigurasi build Anda, Anda menyertakan pustaka pencatatan dan adaptor SLF4J di classpath. Dengan mengubah pustaka dalam konfigurasi build, Anda dapat mengubah tipe logger tanpa mengubah kode fungsi Anda. SLF4J diperlukan untuk menangkap log dari SDK for Java.

Dalam kode contoh berikut, kelas handler menggunakan SLF4J untuk mengambil logger.

contoh src/main/java/example/HandlerS3.java — Logging dengan SLF4J
package example; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.S3Event; import static org.apache.logging.log4j.CloseableThreadContext.put; public class HandlerS3 implements RequestHandler<S3Event, String>{ private static final Logger logger = LoggerFactory.getLogger(HandlerS3.class); @Override public String handleRequest(S3Event event, Context context) { for(var record : event.getRecords()) { try (var loggingCtx = put("awsRegion", record.getAwsRegion())) { loggingCtx.put("eventName", record.getEventName()); loggingCtx.put("bucket", record.getS3().getBucket().getName()); loggingCtx.put("key", record.getS3().getObject().getKey()); logger.info("Handling s3 event"); } } return "Ok"; } }

Kode ini menghasilkan output log seperti berikut:

contoh format log
{ "timestamp": "2023-11-15T16:56:00.815Z", "level": "INFO", "message": "Handling s3 event", "logger": "example.HandlerS3", "AWSRequestId": "0bced576-3936-4e5a-9dcd-db9477b77f97", "awsRegion": "eu-south-1", "bucket": "java-logging-test-input-bucket", "eventName": "ObjectCreated:Put", "key": "test-folder/" }

Konfigurasi build mengambil dependensi runtime pada appender Lambda dan adaptor SLF4J, dan dependensi implementasi pada Log4j2.

contoh build.gradle – dependensi pencatatan
dependencies { ... 'com.amazonaws:aws-lambda-java-log4j2:[1.6.0,)', 'com.amazonaws:aws-lambda-java-events:[3.11.3,)', 'org.apache.logging.log4j:log4j-layout-template-json:[2.17.1,)', 'org.apache.logging.log4j:log4j-slf4j2-impl:[2.19.0,)', ... }

Saat Anda menjalankan kode Anda secara lokal untuk pengujian, objek konteks dengan logger Lambda tidak tersedia, dan tidak ada ID permintaan untuk appender Lambda untuk digunakan. Misalnya konfigurasi uji, lihat aplikasi sampel di bagian berikutnya.

Menggunakan alat dan pustaka logging lainnya

Powertools for AWS Lambda (Java) adalah toolkit pengembang untuk mengimplementasikan praktik terbaik Tanpa Server dan meningkatkan kecepatan pengembang. Utilitas Log ging menyediakan logger yang dioptimalkan Lambda yang mencakup informasi tambahan tentang konteks fungsi di semua fungsi Anda dengan output terstruktur sebagai JSON. Gunakan utilitas ini untuk melakukan hal berikut:

  • Tangkap bidang kunci dari konteks Lambda, start dingin, dan output logging struktur sebagai JSON

  • Log peristiwa pemanggilan Lambda saat diinstruksikan (dinonaktifkan secara default)

  • Cetak semua log hanya untuk persentase pemanggilan melalui pengambilan sampel log (dinonaktifkan secara default)

  • Tambahkan kunci tambahan ke log terstruktur kapan saja

  • Gunakan format log kustom (Bring Your Own Formatter) untuk menampilkan log dalam struktur yang kompatibel dengan RFC Logging organisasi Anda

Menggunakan Powertools untuk AWS Lambda (Jawa) dan AWS SAM untuk logging terstruktur

Ikuti langkah-langkah di bawah ini untuk mengunduh, membangun, dan menerapkan contoh aplikasi Hello World Java dengan modul Powertools untuk AWS Lambda (Java) terintegrasi menggunakan. AWS SAM Aplikasi ini mengimplementasikan backend API dasar dan menggunakan Powertools untuk memancarkan log, metrik, dan jejak. Ini terdiri dari titik akhir Amazon API Gateway dan fungsi Lambda. Saat Anda mengirim permintaan GET ke titik akhir API Gateway, fungsi Lambda memanggil, mengirimkan log dan metrik menggunakan Format Metrik Tertanam ke CloudWatch, dan mengirimkan jejak ke. AWS X-Ray Fungsi mengembalikan hello world pesan.

Prasyarat

Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:

Menyebarkan sampel AWS SAM application
  1. Inisialisasi aplikasi menggunakan template Hello World Java.

    sam init --app-template hello-world-powertools-java --name sam-app --package-type Zip --runtime java11 --no-tracing
  2. Bangun aplikasi.

    cd sam-app && sam build
  3. Terapkan aplikasi.

    sam deploy --guided
  4. Ikuti petunjuk di layar. Untuk menerima opsi default yang disediakan dalam pengalaman interaktif, tekanEnter.

    catatan

    Karena HelloWorldFunction mungkin tidak memiliki otorisasi yang ditentukan, Apakah ini baik-baik saja? , pastikan untuk masuky.

  5. Dapatkan URL aplikasi yang digunakan:

    aws cloudformation describe-stacks --stack-name sam-app --query 'Stacks[0].Outputs[?OutputKey==`HelloWorldApi`].OutputValue' --output text
  6. Memanggil titik akhir API:

    curl -X GET <URL_FROM_PREVIOUS_STEP>

    Jika berhasil, Anda akan melihat respons ini:

    {"message":"hello world"}
  7. Untuk mendapatkan log untuk fungsi tersebut, jalankan sam logs. Untuk informasi selengkapnya, lihat Bekerja dengan log di Panduan AWS Serverless Application Model Pengembang.

    sam logs --stack-name sam-app

    Output log terlihat seperti ini:

    2025/09/03/[$LATEST]851411a899b545eea2cffeba4cfbec81 2023-02-03T09:24:34.095000 INIT_START Runtime Version: java:11.v15    Runtime Version ARN: arn:aws:lambda:eu-central-1::runtime:0a25e3e7a1cc9ce404bc435eeb2ad358d8fa64338e618d0c224fe509403583ca
    2025/09/03/[$LATEST]851411a899b545eea2cffeba4cfbec81 2023-02-03T09:24:34.114000 Picked up JAVA_TOOL_OPTIONS: -XX:+TieredCompilation -XX:TieredStopAtLevel=1
    2025/09/03/[$LATEST]851411a899b545eea2cffeba4cfbec81 2023-02-03T09:24:34.793000 Transforming org/apache/logging/log4j/core/lookup/JndiLookup (lambdainternal.CustomerClassLoader@1a6c5a9e)
    2025/09/03/[$LATEST]851411a899b545eea2cffeba4cfbec81 2023-02-03T09:24:35.252000 START RequestId: 7fcf1548-d2d4-41cd-a9a8-6ae47c51f765 Version: $LATEST
    2025/09/03/[$LATEST]851411a899b545eea2cffeba4cfbec81 2023-02-03T09:24:36.531000 {
      "_aws": {
        "Timestamp": 1675416276051,
        "CloudWatchMetrics": [
          {
            "Namespace": "sam-app-powerools-java",
            "Metrics": [
              {
                "Name": "ColdStart",
                "Unit": "Count"
              }
            ],
            "Dimensions": [
              [
                "Service",
                "FunctionName"
              ]
            ]
          }
        ]
      },
      "function_request_id": "7fcf1548-d2d4-41cd-a9a8-6ae47c51f765",
      "traceId": "Root=1-63dcd2d1-25f90b9d1c753a783547f4dd;Parent=e29684c1be352ce4;Sampled=1",
      "FunctionName": "sam-app-HelloWorldFunction-y9Iu1FLJJBGD",
      "functionVersion": "$LATEST",
      "ColdStart": 1.0,
      "Service": "service_undefined",
      "logStreamId": "2025/09/03/[$LATEST]851411a899b545eea2cffeba4cfbec81",
      "executionEnvironment": "AWS_Lambda_java11"
    }
    2025/09/03/[$LATEST]851411a899b545eea2cffeba4cfbec81 2023-02-03T09:24:36.974000 Feb 03, 2023 9:24:36 AM com.amazonaws.xray.AWSXRayRecorder <init>
    2025/09/03/[$LATEST]851411a899b545eea2cffeba4cfbec81 2023-02-03T09:24:36.993000 Feb 03, 2023 9:24:36 AM com.amazonaws.xray.config.DaemonConfiguration <init>
    2025/09/03/[$LATEST]851411a899b545eea2cffeba4cfbec81 2023-02-03T09:24:36.993000 INFO: Environment variable AWS_XRAY_DAEMON_ADDRESS is set. Emitting to daemon on address XXXX.XXXX.XXXX.XXXX:2000.
    2025/09/03/[$LATEST]851411a899b545eea2cffeba4cfbec81 2023-02-03T09:24:37.331000 09:24:37.294 [main] INFO  helloworld.App - {"version":null,"resource":"/hello","path":"/hello/","httpMethod":"GET","headers":{"Accept":"*/*","CloudFront-Forwarded-Proto":"https","CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":"false","CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":"false","CloudFront-Viewer-ASN":"16509","CloudFront-Viewer-Country":"IE","Host":"XXXX.execute-api.eu-central-1.amazonaws.com","User-Agent":"curl/7.86.0","Via":"2.0 f0300a9921a99446a44423d996042050.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"t9W5ByT11HaY33NM8YioKECn_4eMpNsOMPfEVRczD7T1RdhbtiwV1Q==","X-Amzn-Trace-Id":"Root=1-63dcd2d1-25f90b9d1c753a783547f4dd","X-Forwarded-For":"XX.XXX.XXX.XX, XX.XXX.XXX.XX","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},"multiValueHeaders":{"Accept":["*/*"],"CloudFront-Forwarded-Proto":["https"],"CloudFront-Is-Desktop-Viewer":["true"],"CloudFront-Is-Mobile-Viewer":["false"],"CloudFront-Is-SmartTV-Viewer":["false"],"CloudFront-Is-Tablet-Viewer":["false"],"CloudFront-Viewer-ASN":["16509"],"CloudFront-Viewer-Country":["IE"],"Host":["XXXX.execute-api.eu-central-1.amazonaws.com"],"User-Agent":["curl/7.86.0"],"Via":["2.0 f0300a9921a99446a44423d996042050.cloudfront.net (CloudFront)"],"X-Amz-Cf-Id":["t9W5ByT11HaY33NM8YioKECn_4eMpNsOMPfEVRczD7T1RdhbtiwV1Q=="],"X-Amzn-Trace-Id":["Root=1-63dcd2d1-25f90b9d1c753a783547f4dd"],"X-Forwarded-For":["XXX, XXX"],"X-Forwarded-Port":["443"],"X-Forwarded-Proto":["https"]},"queryStringParameters":null,"multiValueQueryStringParameters":null,"pathParameters":null,"stageVariables":null,"requestContext":{"accountId":"XXX","stage":"Prod","resourceId":"at73a1","requestId":"ba09ecd2-acf3-40f6-89af-fad32df67597","operationName":null,"identity":{"cognitoIdentityPoolId":null,"accountId":null,"cognitoIdentityId":null,"caller":null,"apiKey":null,"principalOrgId":null,"sourceIp":"54.240.197.236","cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":null,"userAgent":"curl/7.86.0","user":null,"accessKey":null},"resourcePath":"/hello","httpMethod":"GET","apiId":"XXX","path":"/Prod/hello/","authorizer":null},"body":null,"isBase64Encoded":false}
    2025/09/03/[$LATEST]851411a899b545eea2cffeba4cfbec81 2023-02-03T09:24:37.351000 09:24:37.351 [main] INFO  helloworld.App - Retrieving https://checkip.amazonaws.com
    2025/09/03/[$LATEST]851411a899b545eea2cffeba4cfbec81 2023-02-03T09:24:39.313000 {
      "function_request_id": "7fcf1548-d2d4-41cd-a9a8-6ae47c51f765",
      "traceId": "Root=1-63dcd2d1-25f90b9d1c753a783547f4dd;Parent=e29684c1be352ce4;Sampled=1",
      "xray_trace_id": "1-63dcd2d1-25f90b9d1c753a783547f4dd",
      "functionVersion": "$LATEST",
      "Service": "service_undefined",
      "logStreamId": "2025/09/03/[$LATEST]851411a899b545eea2cffeba4cfbec81",
      "executionEnvironment": "AWS_Lambda_java11"
    }
    2025/09/03/[$LATEST]851411a899b545eea2cffeba4cfbec81 2023-02-03T09:24:39.371000 END RequestId: 7fcf1548-d2d4-41cd-a9a8-6ae47c51f765
    2025/09/03/[$LATEST]851411a899b545eea2cffeba4cfbec81 2023-02-03T09:24:39.371000 REPORT RequestId: 7fcf1548-d2d4-41cd-a9a8-6ae47c51f765    Duration: 4118.98 ms    Billed Duration: 5275 ms    Memory Size: 512 MB    Max Memory Used: 152 MB    Init Duration: 1155.47 ms    
    XRAY TraceId: 1-63dcd2d1-25f90b9d1c753a783547f4dd    SegmentId: 3a028fee19b895cb    Sampled: true
  8. Ini adalah titik akhir API publik yang dapat diakses melalui internet. Kami menyarankan Anda menghapus titik akhir setelah pengujian.

    sam delete

Mengelola retensi log

Grup log tidak terhapus secara otomatis ketika Anda menghapus suatu fungsi. Untuk menghindari penyimpanan log tanpa batas waktu, hapus grup log, atau konfigurasikan periode retensi yang setelah CloudWatch itu secara otomatis menghapus log. Untuk mengatur retensi log, tambahkan yang berikut ini ke AWS SAM template Anda:

Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: # Omitting other properties LogGroup: Type: AWS::Logs::LogGroup Properties: LogGroupName: !Sub "/aws/lambda/${HelloWorldFunction}" RetentionInDays: 7

Melihat log di konsol Lambda

Anda dapat menggunakan konsol Lambda untuk melihat output log setelah Anda memanggil fungsi Lambda.

Jika kode Anda dapat diuji dari editor Kode yang disematkan, Anda menemukan log dalam hasil eksekusi. Saat Anda menggunakan fitur pengujian konsol untuk memanggil fungsi, Anda menemukan keluaran Log di bagian Detail.

Melihat log di CloudWatch konsol

Anda dapat menggunakan CloudWatch konsol Amazon untuk melihat log untuk semua pemanggilan fungsi Lambda.

Untuk melihat log di CloudWatch konsol
  1. Buka halaman Grup log di CloudWatch konsol.

  2. Pilih grup log untuk fungsi Anda (/aws/lambda/your-function-name).

  3. Pilih pengaliran log.

Setiap aliran log sesuai dengan instans fungsi Anda. Aliran log muncul saat Anda memperbarui fungsi Lambda Anda, dan ketika instance tambahan dibuat untuk menangani pemanggilan bersamaan. Untuk menemukan log untuk pemanggilan tertentu, sebaiknya instrumentasikan fungsi Anda dengan. AWS X-Ray X-Ray merekam detail tentang permintaan dan aliran log di jejak.

Melihat log menggunakan AWS Command Line Interface (AWS CLI)

Ini AWS CLI adalah alat sumber terbuka yang dapat Anda gunakan untuk berinteraksi dengan AWS layanan menggunakan perintah di shell baris perintah Anda. Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki AWS CLI versi 2.

Anda dapat menggunakan AWS CLI untuk mengambil log untuk invokasi menggunakan opsi perintah --log-type. Respons berisi bidang LogResult yang memuat hingga 4 KB log berkode base64 dari invokasi.

contoh mengambil ID log

Contoh berikut menunjukkan cara mengambil ID log dari LogResult untuk fungsi bernama my-function.

aws lambda invoke --function-name my-function out --log-type Tail

Anda akan melihat output berikut:

{
    "StatusCode": 200,
    "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...",
    "ExecutedVersion": "$LATEST"
}
contoh mendekode log

Pada prompt perintah yang sama, gunakan utilitas base64 untuk mendekodekan log. Contoh berikut menunjukkan cara mengambil log berkode base64 untuk my-function.

aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode

cli-binary-formatOpsi ini diperlukan jika Anda menggunakan AWS CLI versi 2. Untuk menjadikan ini pengaturan default, jalankanaws configure set cli-binary-format raw-in-base64-out. Untuk informasi selengkapnya, lihat opsi baris perintah global yang AWS CLI didukung di Panduan AWS Command Line Interface Pengguna untuk Versi 2.

Anda akan melihat output berikut:

START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST
"AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib",
END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8
REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8  Duration: 79.67 ms      Billed Duration: 80 ms         Memory Size: 128 MB     Max Memory Used: 73 MB

Utilitas base64 tersedia di Linux, macOS, dan Ubuntu pada Windows. Pengguna macOS mungkin harus menggunakan base64 -D.

contoh Skrip get-logs.sh

Pada prompt perintah yang sama, gunakan script berikut untuk mengunduh lima peristiwa log terakhir. Skrip menggunakan sed untuk menghapus kutipan dari file output, dan akan tidur selama 15 detik untuk memberikan waktu agar log tersedia. Output mencakup respons dari Lambda dan output dari perintah get-log-events.

Salin konten dari contoh kode berikut dan simpan dalam direktori proyek Lambda Anda sebagai get-logs.sh.

cli-binary-formatOpsi ini diperlukan jika Anda menggunakan AWS CLI versi 2. Untuk menjadikan ini pengaturan default, jalankanaws configure set cli-binary-format raw-in-base64-out. Untuk informasi selengkapnya, lihat opsi baris perintah global yang AWS CLI didukung di Panduan AWS Command Line Interface Pengguna untuk Versi 2.

#!/bin/bash aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload '{"key": "value"}' out sed -i'' -e 's/"//g' out sleep 15 aws logs get-log-events --log-group-name /aws/lambda/my-function --log-stream-name stream1 --limit 5
contoh macOS dan Linux (khusus)

Dalam command prompt yang sama, pengguna macOS dan Linux mungkin perlu menjalankan perintah berikut untuk memastikan skrip dapat dieksekusi.

chmod -R 755 get-logs.sh
contoh mengambil lima log acara terakhir

Pada prompt perintah yang sama, gunakan skrip berikut untuk mendapatkan lima log acara terakhir.

./get-logs.sh

Anda akan melihat output berikut:

{ "StatusCode": 200, "ExecutedVersion": "$LATEST" } { "events": [ { "timestamp": 1559763003171, "message": "START RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf Version: $LATEST\n", "ingestionTime": 1559763003309 }, { "timestamp": 1559763003173, "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tENVIRONMENT VARIABLES\r{\r \"AWS_LAMBDA_FUNCTION_VERSION\": \"$LATEST\",\r ...", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003173, "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tEVENT\r{\r \"key\": \"value\"\r}\n", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003218, "message": "END RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\n", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003218, "message": "REPORT RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\tDuration: 26.73 ms\tBilled Duration: 27 ms \tMemory Size: 128 MB\tMax Memory Used: 75 MB\t\n", "ingestionTime": 1559763018353 } ], "nextForwardToken": "f/34783877304859518393868359594929986069206639495374241795", "nextBackwardToken": "b/34783877303811383369537420289090800615709599058929582080" }

Menghapus log

Grup log tidak terhapus secara otomatis ketika Anda menghapus suatu fungsi. Untuk menghindari penyimpanan log secara tidak terbatas, hapus kelompok log, atau lakukan konfigurasi periode penyimpanan, yang setelahnya log akan dihapus secara otomatis.

Kode pencatatan sampel

Re GitHub positori untuk panduan ini mencakup contoh aplikasi yang menunjukkan penggunaan berbagai konfigurasi logging. Setiap contoh aplikasi menyertakan skrip untuk penerapan dan pembersihan yang mudah, AWS SAM template, dan sumber daya pendukung.

Sampel aplikasi Lambda di Java
  • example-java — Fungsi Java yang menunjukkan bagaimana Anda dapat menggunakan Lambda untuk memproses pesanan. Fungsi ini menggambarkan cara mendefinisikan dan mendeserialisasi objek peristiwa input kustom, menggunakan AWS SDK, dan logging keluaran.

  • java-basic — Kumpulan fungsi Java minimal dengan pengujian unit dan konfigurasi logging variabel.

  • java-events — Kumpulan fungsi Java yang berisi kode kerangka untuk cara menangani peristiwa dari berbagai layanan seperti Amazon API Gateway, Amazon SQS, dan Amazon Kinesis. Fungsi-fungsi ini menggunakan versi terbaru dari pustaka aws-lambda-java-events (3.0.0 dan yang lebih baru). Contoh-contoh ini tidak memerlukan AWS SDK sebagai ketergantungan.

  • s3-java – Fungsi Java yang memproses kejadian pemberitahuan dari Amazon S3 dan menggunakan Java Class Library (JCL) untuk membuat thumbnail dari file gambar yang diunggah.

  • layer-java - Fungsi Java yang menggambarkan cara menggunakan lapisan Lambda untuk mengemas dependensi terpisah dari kode fungsi inti Anda.

Aplikasi sampel java-basic menunjukkan konfigurasi pencatatan minimal yang mendukung uji pencatatan. Kode handler menggunakan logger LambdaLogger yang disediakan oleh objek konteks. Untuk pengujian, aplikasi menggunakan TestLogger kelas kustom yang mengimplementasikan LambdaLogger antarmuka dengan Log4j2 logger. Ini menggunakan SLF4J sebagai fasad untuk kompatibilitas dengan SDK. AWS Pustaka log masuk dikecualikan dari output pembuatan untuk menjaga paket deployment tetap kecil.