Memecahkan masalah Library Klien Cloud untuk Java

Dokumen ini memberikan ringkasan tentang logging dan pemecahan masalah umum dengan Library Klien Cloud untuk Java.

Logging

Ada dua cara untuk mengaktifkan logging untuk library klien: menggunakan java.util.logging, atau menggunakan Logging Debug Library Klien dengan SLF4J.

Menggunakan java.util.logging

Library Klien Cloud untuk Java menggunakan paket Java logging API (java.util.logging). Mengonfigurasi tingkat logging akan menampilkan informasi yang membantu Anda memecahkan masalah, termasuk:

  • Waktu komunikasi klien-server yang mendasarinya.
  • Header pesan permintaan dan respons.
  • Pesan panjang di library dependensi yang mendasarinya.

Untuk mengaktifkan logging panjang dengan cepat untuk Library Klien Cloud untuk Java, buat file logging.properties dengan konten berikut:

# run java program pointing to this properties file with the java arg
#   -Djava.util.logging.config.file=path/to/logging.properties
handlers=java.util.logging.ConsoleHandler
java.util.logging.SimpleFormatter.format=%1$tF %1$tT,%1$tL %4$-8s %3$-50s - %5$s %6$s%n

# --- ConsoleHandler ---
java.util.logging.ConsoleHandler.level=ALL
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
.level=INFO

# --- Specify logging level for certain packages ---
# com.google.api is for HTTP 1.1 layer
com.google.api.level=ALL
# io.grpc is for gRPC + Netty layer
io.grpc.level=FINE
# com.google.auth is for authentication
com.google.auth.level=FINE

# Example when you specify the storage library's level. This works when
# the target Cloud library uses the logging API.
com.google.cloud.storage.level=INFO

Selanjutnya, jalankan aplikasi Anda dengan -Djava.util.logging.config.file=path/to/logging.properties sebagai VM argument, bukan Program argument.

Jika menggunakan IntelliJ, Anda menentukan argumen VM di Run/Debug Configuration:

Konfigurasi Run/Debug IntelliJ yang menunjukkan tempat untuk menentukan argumen VM

Jika JVM program Anda berjalan dengan konfigurasi yang benar, Anda akan melihat logging tingkat FINE di konsol.

Contoh output:

2023-04-05 13:03:01,761 FINE     com.google.auth.oauth2.DefaultCredentialsProvider  - Attempting to load credentials from well known file: /usr/local/google/home/suztomo/.config/gcloud/application_default_credentials.json
2023-04-05 13:03:01,847 FINE     io.grpc.ManagedChannelRegistry                     - Unable to find OkHttpChannelProvider
java.lang.ClassNotFoundException: io.grpc.okhttp.OkHttpChannelProvider
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:315)
...

Ini adalah salah satu cara untuk mengonfigurasi tingkat logging. Untuk mengetahui informasi selengkapnya tentang penggunaan Java logging API, lihat Ringkasan Logging Java.

Logging Debug Library Klien (SLF4J)

Library Klien Cloud dilengkapi dengan Logging Debug opsional yang dapat membantu Anda memecahkan masalah integrasi aplikasi dengan API. Saat logging diaktifkan, peristiwa utama seperti permintaan dan respons, beserta payload data dan metadata, seperti header, akan dicatat ke aliran error standar.

PERINGATAN: Logging Debug Library Klien menyertakan payload data Anda dalam teks biasa, yang dapat mencakup data sensitif seperti PII untuk Anda atau pelanggan Anda, kunci pribadi, atau data keamanan lainnya yang dapat disusupi jika bocor. Selalu praktikkan kebersihan data yang baik dengan log aplikasi Anda, dan ikuti prinsip akses paling sedikit. Google juga merekomendasikan agar logging debug library klien hanya diaktifkan untuk sementara selama proses debug aktif, dan tidak digunakan secara permanen dalam produksi.

Prasyarat

Library kami mendukung logging debug menggunakan SLF4J antarmuka.

Library klien dan BOM Library tidak menyertakan dependensi slf4j-api. Anda harus menyiapkan dependensi logging termasuk SLF4J dan implementasi serta konfigurasi logging yang sesuai sebelum mengaktifkan logging debug library klien.

NOTE: Anda harus memiliki SLF4J dan penyedia logging yang sesuai, misalnya, logback, log4j2, dll., di classpath agar dapat menggunakan fitur logging debug library klien; jika tidak, tidak ada logging debug meskipun Anda mengaktifkannya menggunakan variabel lingkungan.

Mengaktifkan Logging dengan variabel lingkungan

Logging debug dinonaktifkan secara default. Logging debug tidak diaktifkan kecuali secara eksplisit meskipun prasyarat terpenuhi.

Anda dapat mengaktifkan logging debug library klien dengan menetapkan variabel lingkungan GOOGLE_SDK_JAVA_LOGGING ke true, tanpa memperhatikan huruf besar/kecil. Jika tidak ditetapkan atau nilai lainnya, logging debug library klien akan dinonaktifkan.

Contoh penyiapan logging

Dokumentasi ini memberikan contoh logging debug menggunakan Logback.

Tambahkan dependensi Logback ke aplikasi Anda, yang akan membawa dependensi slf4j secara transitif. Pengguna harus melihat penyiapan Logback untuk versi terbaru. Anda dapat melewati langkah ini jika aplikasi Anda sudah memiliki dependensi logback di classpath.

Jika Anda menggunakan Maven:

<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>LATEST_VERSION</version>
</dependency>

Tambahkan konten ke file konfigurasi logback jika Anda ingin melihat log tingkat DEBUG. Anda dapat melewati langkah ini jika hanya memerlukan log tingkat INFO. Lihat Konfigurasi Logback untuk mengetahui informasi selengkapnya.