Die .NET-Clientbibliothek protokolliert Anfragen, Antworten und Zusammenfassungsnachrichten, die an die Google Ads API gesendet werden. Die Logs können in einen benutzerdefinierten
TraceListener oder in eine benutzerdefinierte ILogger
Instanz geschrieben werden.
TraceListener
Sie können das Logging in einen TraceListener aktivieren, indem Sie die folgenden Zeilen in Ihrer Main-Methode hinzufügen, bevor Sie API-Aufrufe ausführen:
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
Wenn Sie bereits einen ILogger für Ihre Anwendungsprotokolle verwenden, können Sie mit dieser Lösung Google Ads API-Logs in Ihre vorhandene Logging-Infrastruktur einbinden.
Erstellen Sie zuerst eine LoggerFactory. Wenn Sie bereits eine haben, fügen Sie die Filter für Google Ads API-Logs hinzu:
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);
});
Verwenden Sie dann die LoggerFactory, um Logger für Zusammenfassungen und Details von Anfragen und Antworten zu erstellen:
ILogger summaryLogger = loggerFactory.CreateLogger(
TraceUtilities.SUMMARY_REQUEST_LOGS_SOURCE);
ILogger detailLogger = loggerFactory.CreateLogger(
TraceUtilities.DETAILED_REQUEST_LOGS_SOURCE);
Konfigurieren Sie schließlich die Clientbibliothek so, dass ihre Traces an Ihre ILogger-Instanzen weitergeleitet werden:
TraceUtilities.ConfigureSummaryLogger(summaryLogger);
TraceUtilities.ConfigureDetailLogger(detailLogger);
Mit dieser Lösung können Sie Google Ads API-Anfrage- und Antwortlogs in vorhandene Logging-Frameworks wie Log4Net, NLog und Serilog einbinden.
Protokollebenen
Die Bibliothek protokolliert verschiedene Ereignistypen auf verschiedenen Protokollebenen:
- Erfolgreiche API-Antwort: Die Zusammenfassung wird auf der Ebene
INFOprotokolliert. Die vollständige Anfrage und Antwort werden auf der EbeneDEBUGprotokolliert. - API-Fehlerantwort: Die Zusammenfassungsnachricht wird auf der Ebene
WARNprotokolliert. Die vollständige Anfrage und Antwort werden auf der EbeneINFOprotokolliert. - Teilweise fehlgeschlagene Vorgänge: Protokolliert auf der Ebene
DEBUG.
Anfrage-ID
In den meisten Fällen enthalten die von der Clientbibliothek generierten Logs genügend Details, um Probleme zu beheben. Wenn Sie sich an den Support wenden, geben Sie entweder die Logs an (in denen sensible Authentifizierungsfelder standardmäßig unkenntlich gemacht werden) oder teilen Sie die Anfrage-ID mit, die als Teil des Antwortlogs protokolliert wird.
Wenn Sie die Anfrage-ID lieber programmatisch erfassen möchten, verwenden Sie eine der folgenden Methoden.
Aus normalen unären API-Aufrufen extrahieren
Sie können benutzerdefinierte CallSettings mit einem TrailingMetadataHandler verwenden, um Anfrage-IDs aus regulären unären Aufrufen zu erfassen:
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);
Aus Streaming-API-Aufrufen extrahieren
Die Anfrage-ID wird als Teil des Antwortobjekts für Streaming-API-Aufrufe zurückgegeben. So können Sie beispielsweise die Anfrage-ID für einen SearchStream-Aufruf abrufen:
// Get the GoogleAdsService.
GoogleAdsServiceClient googleAdsService = client.GetService(
Services.V26.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);
}
}
);
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;
Console.WriteLine($"Failed Request ID: {requestId}");
}
Erweitertes Logging konfigurieren
Wenn das API-Log nicht genügend Details enthält, aktivieren Sie das Logging auf niedrigerer Ebene auf der gRPC-Transportebene. Beachten Sie, dass die Ausgabe sehr umfangreich sein kann.
Wenn Sie den Standardtransport Grpc.Net.Client verwenden, konfigurieren Sie Logs auf Transportebene
über den ILogger-Anbieter von .NET, indem Sie einen Filter für
die Kategorie Grpc hinzufügen (z. B. builder.AddFilter("Grpc", LogLevel.Debug)).
Wenn Sie den Legacy-Transport Grpc.Core (UseGrpcCore = true) verwenden, werden gRPC-Logs standardmäßig in stderr geschrieben. Sie können aber auch einen eigenen Logger anhängen, wie im folgenden Beispiel gezeigt. Weitere Informationen finden Sie unter
Unterstützte gRPC-Umgebungsvariablen.
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 die Logging-Konfiguration aus der Datei App.config oder Web.config Ihrer App laden. Dies ist eine Legacy-Funktion von .NET, die für Apps, die für moderne .NET-Ziele erstellt wurden, nicht unterstützt wird.
Führen Sie die folgenden Änderungen an Ihrer Konfigurationsdatei aus, um diese Funktion zu verwenden:
Fügen Sie den folgenden Code-Snippet unter dem 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 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>Fügen Sie den folgenden Code-Snippet unter dem
<configSections>Abschnitt hinzu:<section name="system.diagnostics" type="System.Diagnostics.SystemDiagnosticsSection" />Ihre
App.configsieht 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>