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 un TraceListener personnalisé ou dans une instance ILogger personnalisée.
TraceListener
Vous pouvez activer la journalisation dans un TraceListener en ajoutant les lignes suivantes dans 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,
"logs/details.log",
System.Diagnostics.SourceLevels.All);
// Summary logs.
TraceUtilities.Configure(
TraceUtilities.SUMMARY_REQUEST_LOGS_SOURCE,
"logs/summary.log",
System.Diagnostics.SourceLevels.All);
ILogger
Si vous utilisez déjà un ILogger pour les journaux de votre application, cette solution vous permet d'intégrer les journaux de l'API Google Ads à votre infrastructure de journalisation existante.
Commencez par créer un LoggerFactory. Si vous en avez déjà un, ajoutez les filtres pour les journaux de l'API Google Ads :
var loggerFactory = LoggerFactory.Create(builder =>
{
// Log to stdout.
builder.AddConsole();
builder.AddFilter(
TraceUtilities.SUMMARY_REQUEST_LOGS_SOURCE, LogLevel.Trace);
builder.AddFilter(
TraceUtilities.DETAILED_REQUEST_LOGS_SOURCE, LogLevel.Trace);
});
Utilisez ensuite LoggerFactory pour créer des enregistreurs pour les résumés et les détails des requêtes et des 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 enregistre différents types d'événements à différents niveaux de journalisation :
- Réponse API réussie : le récapitulatif est consigné au niveau
INFO, et la requête et la réponse complètes sont consignées au niveauDEBUG. - Réponse d'erreur de l'API : le message récapitulatif est consigné au niveau
WARN, et la requête et la réponse complètes sont consignées au niveauINFO. - Échecs partiels : enregistrés à
DEBUG.
Identifiant de la demande
Dans la plupart des cas, les journaux générés par la bibliothèque cliente fournissent suffisamment d'informations pour résoudre vos problèmes. Lorsque vous contactez l'assistance, fournissez les journaux (qui masquent les champs d'authentification sensibles par défaut) ou partagez l'ID de la requête, qui est consigné dans le journal des réponses.
Si vous préférez capturer l'ID de la requête de manière programmatique, utilisez l'une des approches suivantes.
Extraire des appels d'API unaires ordinaires
Vous pouvez utiliser un CallSettings personnalisé avec un TrailingMetadataHandler pour capturer les ID de requête à partir d'appels unaires réguliers :
CallSettings callSettings = CallSettings.FromTrailingMetadataHandler(
metadata =>
{
// Extract and log the request ID from the trailing metadata.
string requestId = metadata.Get("request-id")?.Value;
Console.WriteLine($"Request ID: {requestId}");
});
// Add the campaigns.
MutateCampaignsResponse retVal = campaignService.MutateCampaigns(
customerId.ToString(), operations.ToArray(), callSettings);
Extraire des appels d'API Streaming
L'ID de la 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.V25.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,
(SearchGoogleAdsStreamResponse resp) =>
{
// Extract the request ID from the response.
string requestId = resp.RequestId;
Console.WriteLine($"Request ID: {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 la 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;
Console.WriteLine($"Failed Request ID: {requestId}");
}
Configurer la journalisation avancée
Si le journal de l'API ne fournit pas suffisamment de détails, activez la journalisation de niveau inférieur au niveau du transport gRPC. N'oubliez pas que le résultat peut être volumineux.
Lorsque vous utilisez le transport Grpc.Net.Client par défaut, configurez les journaux au niveau du transport via le fournisseur ILogger de .NET en ajoutant un filtre pour la catégorie Grpc (par exemple, builder.AddFilter("Grpc", LogLevel.Debug)).
Si vous utilisez l'ancien transport Grpc.Core (UseGrpcCore = true), les journaux gRPC sont écrits dans stderr par défaut. Vous pouvez également joindre votre propre enregistreur de journaux, comme indiqué dans l'exemple suivant. Pour en savoir plus, consultez les variables d'environnement gRPC 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 conçues pour les cibles .NET modernes.
Pour utiliser cette fonctionnalité, ajoutez les modifications suivantes à votre fichier de configuration :
Ajoutez l'extrait suivant sous 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 a 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 a 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 Google Ads .NET libraries. The default level is set to Warning. To disable all messages, set this value to Off. --> <add name="GoogleAds.DeprecationMessages" value="Warning" /> <!-- Use this trace switch to control the detailed request logs written by Google 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 Google 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>Ajoutez l'extrait suivant sous la section
<configSections>:<section name="system.diagnostics" type="System.Diagnostics.SystemDiagnosticsSection" />Votre
App.configse 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>