

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

# Mengkonfigurasi dan menggunakan logging di AWS SDK for C\$1\$1
<a name="logging"></a>

 AWS SDK untuk C\$1\$1 Termasuk logging yang dapat dikonfigurasi yang menghasilkan catatan tindakan yang dilakukan oleh SDK selama eksekusi. Untuk mengaktifkan logging, atur `LogLevel` dari `SDKOptions` ke verbositas yang sesuai untuk aplikasi Anda.

```
    Aws::SDKOptions options;
    options.loggingOptions.logLevel = Aws::Utils::Logging::LogLevel::Info;
```

Ada tujuh tingkat verbositas untuk dipilih. Nilai defaultnya adalah `Off` dan tidak ada log yang akan dihasilkan. `Trace`akan menghasilkan tingkat detail paling banyak, dan `Fatal` akan menghasilkan pesan paling sedikit yang hanya melaporkan kondisi kesalahan fatal.

Setelah logging diaktifkan di aplikasi Anda, SDK akan menghasilkan file log di direktori executable Anda mengikuti pola penamaan default. `aws_sdk_<date>.log` File log yang dihasilkan oleh opsi penamaan awalan bergulir sekali per jam untuk memungkinkan pengarsipan atau penghapusan file log.

Versi SDK yang lebih baru semakin bergantung pada pustaka AWS Common Runtime (CRT) yang mendasarinya. Pustaka ini menyediakan fungsionalitas umum dan operasi dasar di antaranya SDKs. Semua pesan log dari pustaka CRT akan diarahkan ke SDK for C\$1\$1 secara default. Tingkat log dan sistem logging yang Anda tentukan untuk SDK for C\$1\$1 juga berlaku untuk CRT. 

Pada contoh sebelumnya, CRT akan mewarisi `LogLevel::Info` dan juga mencatat pesan pada `Info` level ke file yang sama.

Anda dapat secara independen mengontrol logging untuk pustaka CRT, baik dengan mengarahkan outputnya ke file log terpisah, atau dengan mengatur tingkat log yang berbeda untuk pesan dari CRT. Seringkali bermanfaat untuk mengurangi verbositas pustaka CRT sehingga tidak membanjiri log. Misalnya, level log *hanya* untuk output CRT dapat diatur menjadi `Warn` sebagai berikut:

```
options.loggingOptions.crt_logger_create_fn =
    [](){ return Aws::MakeShared<Aws::Utils::Logging::DefaultCRTLogSystem>("CRTLogSystem", Aws::Utils::Logging::LogLevel::Warn); };
```

Dengan opsional menggunakan metode ini`InitializeAWSLogging`, Anda dapat mengontrol tingkat verbositas dan output log dari. `DefaultLogSystem` Anda dapat mengonfigurasi awalan nama file log, atau mengarahkan output ke aliran alih-alih file. 

```
Aws::Utils::Logging::InitializeAWSLogging(
    Aws::MakeShared<Aws::Utils::Logging::DefaultLogSystem>(
        "RunUnitTests", Aws::Utils::Logging::LogLevel::Trace, "aws_sdk_"));
```

Atau, alih-alih menggunakan`DefaultLogSystem`, Anda juga dapat menggunakan metode ini untuk menyediakan implementasi logging Anda sendiri.

```
InitializeAWSLogging(Aws::MakeShared<CustomLoggingSystem>());
```

Jika Anda memanggil metode`InitializeAWSLogging`, sumber daya gratis di akhir program Anda dengan menelepon`ShutdownAWSLogging`.

```
Aws::Utils::Logging::ShutdownAWSLogging();
```

 **Contoh uji integrasi dengan logging** 

```
#include <aws/external/gtest.h>

#include <aws/core/utils/memory/stl/AWSString.h>
#include <aws/core/utils/logging/DefaultLogSystem.h>
#include <aws/core/utils/logging/AWSLogging.h>

#include <iostream>

int main(int argc, char** argv)
{
    Aws::Utils::Logging::InitializeAWSLogging(
        Aws::MakeShared<Aws::Utils::Logging::DefaultLogSystem>(
            "RunUnitTests", Aws::Utils::Logging::LogLevel::Trace, "aws_sdk_"));
    ::testing::InitGoogleTest(&argc, argv);
    int exitCode = RUN_ALL_TESTS();
    Aws::Utils::Logging::ShutdownAWSLogging();
    return exitCode;
}
```

 **Contoh subkelas `Aws::Utils::Logging::DefaultLogSystem` untuk pencatatan khusus** 

 Kode berikut menunjukkan bagaimana untuk subclass `Aws::Utils::Logging::DefaultLogSystem` kelas, yang merupakan bagian dari. AWS SDK untuk C\$1\$1 Contoh ini mengesampingkan fungsi `ProcessFormattedStatement` virtual untuk menyesuaikan logging. 

 `Aws::Utils::Logging::DefaultLogSystem`adalah salah satu dari beberapa kelas di subkelas AWS SDK untuk C\$1\$1 itu `Aws::Utils::Logging::LogSystemInterface` untuk pencatatan khusus. 

```
class LogSystemOverride : public Aws::Utils::Logging::DefaultLogSystem {
public:
    explicit LogSystemOverride(Aws::Utils::Logging::LogLevel logLevel,
                               const Aws::String &logPrefix)
            : DefaultLogSystem(logLevel, logPrefix), mLogToStreamBuf(false) {}

    const Aws::Utils::Stream::SimpleStreamBuf &GetStreamBuf() const {
        return mStreamBuf;
    }

    void setLogToStreamBuf(bool logToStreamBuf) {
        mLogToStreamBuf = logToStreamBuf;
    }

protected:

    void ProcessFormattedStatement(Aws::String &&statement) override {
        if (mLogToStreamBuf) {
            std::lock_guard<std::mutex> lock(mStreamMutex);
            mStreamBuf.sputn(statement.c_str(), statement.length());
        }

        DefaultLogSystem::ProcessFormattedStatement(std::move(statement));
    }

private:
    Aws::Utils::Stream::SimpleStreamBuf mStreamBuf;
    // Use a mutex when writing to the buffer because
    // ProcessFormattedStatement can be called from multiple threads.
    std::mutex mStreamMutex;
    std::atomic<bool> mLogToStreamBuf;
};
```

```
int main(int argc, char **argv) {
    Aws::SDKOptions options;
    options.loggingOptions.logLevel = Aws::Utils::Logging::LogLevel::Trace;
    auto logSystemOverride = Aws::MakeShared<LogSystemOverride>("AllocationTag",
                                                                options.loggingOptions.logLevel,
                                                                options.loggingOptions.defaultLogPrefix);
    options.loggingOptions.logger_create_fn = [logSystemOverride]() {
        return logSystemOverride;
    };

    Aws::InitAPI(options);  // Call Aws::InitAPI only once in an application.
    {
        Aws::Client::ClientConfiguration clientConfig;
        // Optional: Set to the AWS Region (overrides config file).
        // clientConfig.region = "us-east-1";

        Aws::S3::S3Client s3Client(clientConfig);

        logSystemOverride->setLogToStreamBuf(true);
        auto outcome = s3Client.ListBuckets();
        if (!outcome.IsSuccess()) {
            std::cerr << "ListBuckets error: " <<
                      outcome.GetError().GetExceptionName() << " " <<
                      outcome.GetError().GetMessage() << std::endl;
        }

        logSystemOverride->setLogToStreamBuf(false);

        std::cout << "Log for ListBuckets" << std::endl;
        std::cout << logSystemOverride->GetStreamBuf().str() << std::endl;
    }

    Aws::ShutdownAPI(options);

    return 0;
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sdk-customization/override_default_logger.cpp) di GitHub.