Journalisation

La bibliothèque cliente .NET enregistre les requêtes, les réponses et les messages récapitulatifs envoyés à l'API Google Ads. Les journaux peuvent être écrits dans une instance TraceListener personnalisée ou sur une instance ILogger personnalisée.

TraceListener

Vous pouvez activer la journalisation dans un TraceListener en ajoutant la ligne suivante à votre méthode 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 résumés et les détails des requêtes et réponses:

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 vos instances ILogger:

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

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

Niveaux de journalisation

La bibliothèque consigne différents types d'événements dans différents niveaux de journalisation. Si une réponse d'API réussie, le résumé est consigné à l'adresse INFO, et la requête complète et les réponses sont consignées à l'adresse DEBUG.

Sur une requête qui génère une erreur d'API, le message récapitulatif est consigné à l'adresse WARN, et la requête complète et la réponse sont consignées à l'adresse 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 de détails pour résoudre les problèmes. Lorsque vous contactez le forum d'assistance ou les alias, vous pouvez fournir les journaux (qui masquent les informations sensibles par défaut) ou simplement partager l'ID de la requête (qui est consigné dans le journal de réponse).

Si vous préférez collecter l'ID de requête vous-même, vous pouvez utiliser l'une des approches suivantes:

Extraction via des appels d'API ordinaires

Vous pouvez utiliser un CallSetting personnalisé avec un TrailingMetadataHandler pour capturer les 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 les appels d'API de streaming. Par exemple, vous pouvez obtenir l'ID de requête pour un appel SearchStream comme suit:

// Get the GoogleAdsService.
GoogleAdsServiceClient googleAdsService = client.GetService(
    Services.V16.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 le cadre de 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 fournit pas suffisamment de détails, activez une journalisation plus faible au niveau de gRPC. Gardez à l'esprit que le résultat peut être volumineux. Les journaux gRPC sont écrits dans stderr, mais vous pouvez associer votre propre enregistreur, comme indiqué ci-dessous. Variables d'environnement compatibles

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 la configuration de journalisation à partir du fichier App.config ou Web.config de votre application. Il s'agit d'une ancienne fonctionnalité .NET qui n'est pas compatible avec les applications créées pour les cibles .NET Core.

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

  1. Ajoutez l'extrait de code 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 de code 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>