ロギング

.NET クライアント ライブラリは、Google Ads API に対するリクエスト、レスポンス、サマリー メッセージをログに記録します。ログは、カスタム TraceListener またはカスタム ILogger インスタンスに書き込むことができます。

TraceListener

TraceListener へのロギングを有効にするには、API 呼び出しを行う前に、次の行を Main メソッドに追加します。

using Google.Ads.GoogleAds.Util;
...

// Detailed logs.
TraceUtilities.Configure(TraceUtilities.DETAILED_REQUEST_LOGS_SOURCE,
    "C:\\logs\\details.log", System.Diagnostics.SourceLevels.All);

// Summary logs.
TraceUtilities.Configure(TraceUtilities.SUMMARY_REQUEST_LOGS_SOURCE,
    "C:\\logs\\details.log", System.Diagnostics.SourceLevels.All);

ILogger

アプリケーション ログにすでに ILogger を使用している場合、このソリューションを使用すると、Google Ads API ログを既存のログに統合できます。

まず、LoggerFactory を作成するか、すでに作成している場合は Google Ads API ログのフィルタを追加します。

var loggerFactory = LoggerFactory.Create(delegate (ILoggingBuilder builder)
{
  // Log to stdout.
  builder.AddConsole();
  builder.AddFilter(TraceUtilities.SUMMARY_REQUEST_LOGS_SOURCE, LogLevel.Trace);
  builder.AddFilter(TraceUtilities.DETAILED_REQUEST_LOGS_SOURCE, LogLevel.Trace);
});

次に、LoggerFactory を使用して、リクエストとレスポンスの概要と詳細のロガーを作成します。

ILogger summaryLogger = loggerFactory.CreateLogger(TraceUtilities.SUMMARY_REQUEST_LOGS_SOURCE);
ILogger detailLogger = loggerFactory.CreateLogger(TraceUtilities.DETAILED_REQUEST_LOGS_SOURCE);

最後に、トレースを ILogger インスタンスにリダイレクトするようにクライアント ライブラリを構成します。

TraceUtilities.ConfigureSummaryLogger(summaryLogger);
TraceUtilities.ConfigureDetailLogger(detailLogger);

このソリューションでは、Google Ads API のリクエストとレスポンスのログを、Log4Net、NLog、Serilog などの既存のロギング フレームワークに統合できます。

ログレベル

このライブラリは、さまざまなタイプのイベントをさまざまなログレベルに記録します。正常な API レスポンスの場合、概要は INFO に、完全なリクエストとレスポンスは DEBUG に記録されます。

API エラーとなったリクエストについては、概要メッセージが WARN に、完全なリクエストとレスポンスが INFO に記録されます。

部分的なエラーは DEBUG に記録されます。

リクエスト ID

ほとんどの場合、クライアント ライブラリによって生成されたログでは、問題のトラブルシューティングに十分な詳細情報を確認できます。サポート フォーラムやエイリアスに連絡する際は、ログを提供する(デフォルトで機密情報を削除する)か、リクエスト ID を共有する(レスポンス ログの一部としてログに記録する)ことができます。

リクエスト ID をご自身でキャプチャする場合は、次のいずれかの方法を使用できます。

通常の API 呼び出しによる抽出

カスタム CallSettingTrailingMetadataHandler とともに使用すると、通常の単項呼び出しからリクエスト ID を取得できます。

CallSettings callSettings = CallSettings.FromTrailingMetadataHandler(
    delegate (Metadata metadata) {
        // Extract the request ID from the trailing metadata.
        string requestId = metadata.Get("request-id").Value;
    });
// Add the campaigns.
MutateCampaignsResponse retVal = campaignService.MutateCampaigns(
    customerId.ToString(), operations.ToArray(), callSettings);

ストリーミング API 呼び出しによる抽出

リクエスト ID は、ストリーミング API 呼び出しのレスポンス オブジェクトの一部として返されます。たとえば、SearchStream 呼び出しのリクエスト ID は次のように取得できます。

// Get the GoogleAdsService.
GoogleAdsServiceClient googleAdsService = client.GetService(
    Services.V17.GoogleAdsService);

// Retrieve all campaigns.
string query = @"SELECT
                campaign.id,
                campaign.name,
                campaign.network_settings.target_content_network
            FROM campaign
            ORDER BY campaign.id";

// Issue a search request.
googleAdsService.SearchStream(customerId.ToString(), query,
    delegate (SearchGoogleAdsStreamResponse resp)
    {
        // Extract the request ID from the response.
        string requestId = resp.RequestId;
        foreach (GoogleAdsRow googleAdsRow in resp.Results)
        {
            Console.WriteLine("Campaign with ID {0} and name '{1}' was found.",
                googleAdsRow.Campaign.Id, googleAdsRow.Campaign.Name);
        }
    }
);

例外

API 呼び出しが失敗するたびに、リクエスト ID は GoogleAdsException 例外の一部として返されます。

try
{
  // Make an API call.
  ...
}
catch (GoogleAdsException e)
{
    string requestId = e.RequestId;
}

高度なロギング

API ログに十分な詳細情報がない場合は、gRPC レベルでより下位レベルのロギングを有効にします。出力が大量になる場合があるので注意してください。gRPC ログは stderr に書き込まれますが、次のように独自のロガーをアタッチできます。サポートされている環境変数

Environment.SetEnvironmentVariable("GRPC_VERBOSITY", "DEBUG");
Environment.SetEnvironmentVariable("GRPC_TRACE", "http");
GrpcEnvironment.SetLogger(new ConsoleLogger());

App.config(レガシー)を使用した TraceListener 構成

.NET Framework ターゲット向けにビルドするアプリの場合、アプリの App.config または Web.config ファイルからロギング構成を読み込むことができます。これは、.NET Core ターゲット用に構築されたアプリでサポートされていないレガシー .NET 機能です。

この機能を使用するには、構成ファイルに次の変更を追加する必要があります。

  1. <configuration> セクションに次のスニペットを追加します。

    <system.diagnostics>
      <sources>
        <source name="GoogleAds.DeprecationMessages"
            switchName="GoogleAds.DeprecationMessages"
            switchType="System.Diagnostics.SourceSwitch">
          <listeners>
            <add name="myListener" type="System.Diagnostics.EventLogTraceListener"
               initializeData="Application"/>
          </listeners>
        </source>
        <source name="GoogleAds.DetailedRequestLogs"
            switchName="GoogleAds.DetailedRequestLogs"
            switchType="System.Diagnostics.SourceSwitch">
          <listeners>
            <add name="detailedRequestLogListener" type="System.Diagnostics.ConsoleTraceListener"
               initializeData="true"/>
            <!-- Use the following to log to file. Modify the initializeData
                 attribute to control the path to the detailed request log file. -->
            <!--
            <add name="detailedRequestLogListener" type="System.Diagnostics.TextWriterTraceListener"
                 initializeData="C:\Logs\detailed_logs.log"/>
            <remove name="Default"/>
            -->
          </listeners>
        </source>
        <source name="GoogleAds.SummaryRequestLogs" switchName="GoogleAds.SummaryRequestLogs"
            switchType="System.Diagnostics.SourceSwitch">
          <listeners>
            <add name="summaryRequestLogListener" type="System.Diagnostics.ConsoleTraceListener"
               initializeData="true"/>
            <!-- Use the following to log to file. Modify the initializeData
                 attribute to control the path to the summary request log file. -->
            <!--
            <add name="summaryRequestLogListener" type="System.Diagnostics.TextWriterTraceListener"
                 initializeData="C:\Logs\summary_logs.log"/>
            -->
            <remove name="Default"/>
          </listeners>
        </source>
      </sources>
      <switches>
        <!-- Use this trace switch to control the deprecation trace messages
             written by Ads* .NET libraries. The default is level is set to
             Warning. To disable all messages, set this value to Off. See
             msdn.microsoft.com/en-us/library/system.diagnostics.sourcelevels.aspx
             for all possible values this key can take. -->
        <add name="GoogleAds.DeprecationMessages" value="Warning"/>
        <!-- Use this trace switch to control the detailed request logs written by Ads*
             .NET libraries. The default level is set to Off. Logs are generated at
             both the Error and Information levels. -->
        <add name="GoogleAds.DetailedRequestLogs" value="Off"/>
        <!-- Use this trace switch to control the summary request logs written by
             Ads* .NET libraries. The default level is set to Off. Logs are
             generated at both the Error and Information levels. -->
        <add name="GoogleAds.SummaryRequestLogs" value="Off"/>
      </switches>
      <trace autoflush="true"/>
    </system.diagnostics>
    
  2. <configSections> セクションに次のスニペットを追加します。

    <section name="system.diagnostics" type="System.Diagnostics.SystemDiagnosticsSection"/>
    

    App.config は次のようになります。

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <section name="GoogleAdsApi" type="System.Configuration.DictionarySectionHandler"/>
        <section name="system.diagnostics" type="System.Diagnostics.SystemDiagnosticsSection"/>
      </configSections>
      <GoogleAdsApi>
        <!-- Google Ads API settings. -->
      </GoogleAdsApi>
      <system.diagnostics>
        <!-- Logging settings. -->
      </system.diagnostics>
    </configuration>