Journalisation

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

La bibliothèque cliente .NET consigne les requêtes, les réponses et les messages de résumé envoyés l'API Google Ads. Les journaux peuvent être écrits dans un bucket TraceListener, ou à un ILogger Compute Engine.

TraceListener

Vous pouvez activer la journalisation dans un TraceListener en ajoutant la ligne suivante dans votre Main avant d'effectuer des appels d'API.

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

Si vous utilisez déjà un ILogger pour vos journaux d'application, cette solution vous permet d'intégrer les journaux de l'API Google Ads dans vos journaux existants.

Commencez par créer un LoggerFactory ou, si vous en avez déjà un, ajoutez les filtres Pour les journaux de l'API Google Ads:

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

Ensuite, utilisez LoggerFactory pour créer des enregistreurs pour les requêtes et les réponses. récapitulatifs et détails:

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

Enfin, configurez la bibliothèque cliente pour rediriger ses traces vers votre ILogger. instances:

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

Cette solution vous permet d'intégrer les journaux des demandes et des réponses de l'API Google Ads dans les frameworks de journalisation existants tels que Log4Net, NLog et Serilog.

Niveaux de journalisation

La bibliothèque consigne différents types d'événements à différents niveaux de journalisation. Pour une de l'API ayant abouti, le résumé est consigné dans INFO, et l'intégralité et les réponses correspondantes sont consignées dans DEBUG.

Lorsqu'une requête entraîne une erreur d'API, le message de résumé est consigné dans WARN, ainsi que la requête et la réponse complètes sont consignées dans INFO.

Les échecs partiels sont consignés à DEBUG.

Numéro de demande

Dans la plupart des cas, les journaux générés par la bibliothèque cliente fournissent suffisamment pour résoudre les problèmes. Lorsque vous contactez l'assistance ou alias, vous pouvez soit fournir les journaux (qui masquent les données sensibles par défaut) ou de partager simplement l'ID de la requête (qui est enregistré sous la forme du journal de réponses).

Si vous préférez récupérer l'ID de demande vous-même, vous pouvez utiliser l'un des approches suivantes:

Extraction via des appels d'API ordinaires

Vous pouvez utiliser un CallSetting personnalisé avec un TrailingMetadataHandler pour capturer ID de requête des appels unaires standards.

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

Extraction via des appels d'API de streaming

L'ID de requête est renvoyé dans l'objet de réponse pour l'API de streaming appels. Par exemple, vous pouvez obtenir l'ID de requête pour un appel SearchStream en tant que ce qui suit:

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

Exceptions

L'ID de requête est renvoyé dans l'exception GoogleAdsException. chaque fois qu'un appel d'API échoue.

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

Journalisation avancée

Si le journal de l'API ne vous donne pas suffisamment de détails, activez une journalisation de niveau inférieur à au niveau gRPC. N'oubliez pas que la sortie peut être volumineuse. Journaux gRPC sont écrits dans stderr, mais vous pouvez y joindre votre propre enregistreur, comme indiqué ci-dessous. Environnement compatible variables.

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

Configuration de TraceListener à l'aide d'App.config (ancien)

Si votre application est compilée pour une cible .NET Framework, vous pouvez charger à partir du fichier App.config ou Web.config de votre application. Il s'agit d'un l'ancienne fonctionnalité .NET qui n'est pas compatible avec les applications créées pour .NET Core. cibles.

Pour utiliser cette fonctionnalité, vous devez ajouter les modifications suivantes à votre configuration :

  1. Ajoutez l'extrait suivant dans la section <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. Ajoutez l'extrait suivant dans la section <configSections>.

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

    Votre App.config se présente alors comme suit:

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