.NET istemci kitaplığı, Google Ads API'ye yapılan istekleri, yanıtları ve özet mesajlarını günlüğe kaydeder. Günlükler özel bir TraceListener veya özel bir ILogger örneğine yazılabilir.
TraceListener
API çağrısı yapmadan önce TraceListener yönteminizde aşağıdaki satırları ekleyerek Main dosyasına kaydetmeyi etkinleştirebilirsiniz:
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
Uygulama günlükleriniz için zaten bir ILogger kullanıyorsanız bu çözüm, Google Ads API günlüklerini mevcut günlük kaydı altyapınıza entegre etmenize olanak tanır.
Öncelikle bir LoggerFactory oluşturun veya zaten bir tane varsa Google Ads API günlükleri için filtreler ekleyin:
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);
});
Ardından, istek ve yanıt özetleri ile ayrıntıları için günlükçüler oluşturmak üzere LoggerFactory simgesini kullanın:
ILogger summaryLogger = loggerFactory.CreateLogger(
TraceUtilities.SUMMARY_REQUEST_LOGS_SOURCE);
ILogger detailLogger = loggerFactory.CreateLogger(
TraceUtilities.DETAILED_REQUEST_LOGS_SOURCE);
Son olarak, istemci kitaplığını izlemelerini ILogger örneklerinize yönlendirecek şekilde yapılandırın:
TraceUtilities.ConfigureSummaryLogger(summaryLogger);
TraceUtilities.ConfigureDetailLogger(detailLogger);
Bu çözüm, Google Ads API istek ve yanıt günlüklerini mevcut günlük çerçevelerine (ör. Log4Net, NLog ve Serilog) entegre etmenize olanak tanır.
Günlük kaydı düzeyleri
Kitaplık, farklı günlük düzeylerinde farklı türlerde etkinlikler günlüğe kaydeder:
- Başarılı API yanıtı: Özet
INFOkonumunda, tam istek ve yanıt iseDEBUGkonumunda günlüğe kaydedilir. - API hata yanıtı: Özet mesaj
WARNkonumuna kaydedilir. Tam istek ve yanıtINFOkonumuna kaydedilir. - Kısmi hatalar:
DEBUGadresinde günlüğe kaydedilir.
Talep numarası
Çoğu durumda, istemci kitaplığı tarafından oluşturulan günlükler sorunlarınızı gidermek için yeterli ayrıntıyı sağlar. Destek ekibine ulaştığınızda günlükleri (varsayılan olarak hassas kimlik doğrulama alanlarını gizler) sağlayın veya yanıt günlüğünün bir parçası olarak kaydedilen istek kimliğini paylaşın.
İstek kimliğini programatik olarak yakalamayı tercih ederseniz aşağıdaki yaklaşımlardan birini kullanın.
Normal tekli API çağrılarından ayıklama
Normal tekli çağrılardan istek kimliklerini almak için TrailingMetadataHandler ile özel bir CallSettings kullanabilirsiniz:
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);
Akış API'si çağrılarından ayıklama
İstek kimliği, akış API'si çağrıları için yanıt nesnesinin bir parçası olarak döndürülür. Örneğin, SearchStream araması için istek kimliğini aşağıdaki gibi alabilirsiniz:
// 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);
}
}
);
İstisnalar
İstek kimliği, bir API çağrısı her başarısız olduğunda GoogleAdsException istisnası kapsamında döndürülür:
try
{
// Make an API call.
}
catch (GoogleAdsException e)
{
string requestId = e.RequestId;
Console.WriteLine($"Failed Request ID: {requestId}");
}
Gelişmiş günlük kaydını yapılandırma
API günlüğü yeterli ayrıntı vermiyorsa gRPC aktarım düzeyinde daha düşük düzeyde günlük kaydını etkinleştirin. Çıktının hacimli olabileceğini unutmayın.
Varsayılan Grpc.Net.Client aktarımını kullanırken Grpc kategorisi için bir filtre ekleyerek (ör. builder.AddFilter("Grpc", LogLevel.Debug)) .NET'in ILogger sağlayıcısı aracılığıyla aktarım düzeyindeki günlükleri yapılandırın.
Eski Grpc.Core aktarımını (UseGrpcCore = true) kullanıyorsanız gRPC günlükleri varsayılan olarak stderr konumuna yazılır. Alternatif olarak, aşağıdaki örnekte gösterildiği gibi kendi günlükçünüzü de ekleyebilirsiniz. Daha fazla bilgi için desteklenen gRPC ortam değişkenleri başlıklı makaleyi inceleyin.
Environment.SetEnvironmentVariable("GRPC_VERBOSITY", "DEBUG");
Environment.SetEnvironmentVariable("GRPC_TRACE", "http");
GrpcEnvironment.SetLogger(new ConsoleLogger());
App.config kullanılarak TraceListener yapılandırması (eski)
Uygulamanız .NET Framework hedefi için oluşturuluyorsa günlük kaydı yapılandırmasını uygulamanızın App.config veya Web.config dosyasından yükleyebilirsiniz. Bu, modern .NET hedefleri için oluşturulan uygulamalarda desteklenmeyen eski bir .NET işlevidir.
Bu özelliği kullanmak için yapılandırma dosyanıza aşağıdaki değişiklikleri ekleyin:
<configuration>bölümünün altına aşağıdaki snippet'i ekleyin:<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><configSections>bölümünün altına aşağıdaki snippet'i ekleyin:<section name="system.diagnostics" type="System.Diagnostics.SystemDiagnosticsSection" />App.configcihazınız aşağıdaki gibi görünür:<?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>