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