Logging

<ph type="x-smartling-placeholder">

Die .NET-Clientbibliothek protokolliert Anfragen, Antworten und Zusammenfassungsnachrichten, die an Google Ads API. Die Logs können in einen benutzerdefinierten TraceListener, oder einer benutzerdefinierten ILogger Instanz.

TraceListener

Sie können das Logging in einem TraceListener aktivieren, indem Sie die folgende Zeile in Ihr Main, bevor Sie API-Aufrufe ausführen.

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

Wenn Sie für Ihre Anwendungslogs bereits ein ILogger verwenden, bietet diese Lösung ermöglicht die Integration von Google Ads API-Protokollen in vorhandene Protokolle.

Erstellen Sie zuerst ein LoggerFactory oder fügen Sie die Filter hinzu, falls Sie bereits eine haben für Google Ads API-Protokolle:

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);
});

Verwenden Sie dann LoggerFactory, um Protokollierungen für Anfragen und Antworten zu erstellen. Zusammenfassungen und Details:

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

Konfigurieren Sie die Clientbibliothek so, dass die Traces an die ILogger weitergeleitet werden. Instanzen:

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

Mit dieser Lösung können Sie Anfrage- und Antwortprotokolle der Google Ads API in vorhandene Logging-Frameworks wie Log4Net, NLog und Serilog.

Protokollebenen

Die Bibliothek protokolliert verschiedene Arten von Ereignissen auf verschiedenen Logebenen. Für eine API-Antwort erfolgreich war, wird die Zusammenfassung unter INFO protokolliert und der vollständige Anfrage und Antworten werden unter DEBUG protokolliert.

Bei Anfragen, die zu einem API-Fehler führen, wird die Zusammenfassungsmeldung WARN und die vollständige Anfrage und Antwort werden unter INFO protokolliert.

Teilfehler werden unter DEBUG protokolliert.

Antrags‑ID

In den meisten Fällen reichen die von der Clientbibliothek generierten Logs um die Probleme zu beheben. Wenn Sie sich an den Support wenden, Foren und Aliasse können Sie die Protokolle einreichen, in denen sensible Daten oder geben Sie einfach die Anfrage-ID weiter, die als des Antwortprotokolls.

Wenn Sie die Anfrage-ID lieber selbst erfassen möchten, können Sie eine der wie folgt vorgehen:

Extraktion über normale API-Aufrufe

Sie können ein benutzerdefiniertes CallSetting mit einem TrailingMetadataHandler verwenden, um Anfrage-IDs aus regulären unären Aufrufen.

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);

Extraktion über Streaming API-Aufrufe

Die Anfrage-ID wird als Teil des Antwortobjekts für die Streaming API zurückgegeben. Anrufe. Die Anfrage-ID für einen SearchStream-Aufruf können Sie beispielsweise so abrufen: folgt:

// 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);
        }
    }
);

Ausnahmen

Die Anfrage-ID wird als Teil der Ausnahme GoogleAdsException zurückgegeben wenn ein API-Aufruf fehlschlägt.

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

Erweiterte Protokollierung

Wenn das API-Protokoll nicht genügend Details enthält, aktivieren Sie eine detailliertere Protokollierung unter auf der gRPC-Ebene. Denken Sie daran, dass die Ausgabe sehr umfangreich sein kann. Die gRPC-Logs in stderr geschrieben werden, Sie können jedoch wie unten gezeigt Ihren eigenen Protokollierungsfaktor anhängen. Unterstützte Umgebung Variablen.

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

TraceListener-Konfiguration mit App.config (Legacy)

Wenn Ihre App für ein .NET Framework-Ziel erstellt wird, können Sie das Logging Konfiguration aus der Datei App.config oder Web.config Ihrer Anwendung. Dies ist ein Legacy-.NET-Funktionen, die für Anwendungen, die für .NET Core erstellt wurden, nicht unterstützt werden Ziele.

Um diese Funktion zu verwenden, müssen Sie die folgenden Änderungen an Ihrer Konfiguration vornehmen Datei:

  1. Fügen Sie das folgende Snippet im Abschnitt <configuration> hinzu.

    <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. Fügen Sie das folgende Snippet im Abschnitt <configSections> hinzu.

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

    Ihr App.config sieht dann so aus:

    <?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>