کتابخانه کلاینت .NET درخواستها، پاسخها و پیامهای خلاصه ارسال شده به API گوگل ادز را ثبت میکند. این گزارشها را میتوان در یک TraceListener سفارشی یا در یک نمونه ILogger سفارشی نوشت.
TraceListener
شما میتوانید با اضافه کردن خط زیر در متد Main خود، قبل از انجام هرگونه فراخوانی API، ثبت وقایع در TraceListener را فعال کنید.
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);
توجه داشته باشید که TraceListeners.Configure فقط باید یک بار در هر چرخه حیات برنامه فراخوانی شود، زیرا TraceListener ایجاد شده توسط آن به طور خودکار در تمام درخواستهای API ارسال شده توسط برنامه مورد استفاده مجدد قرار میگیرد؛ نیازی نیست برای هر درخواست API یک مورد جدید ایجاد کنید.
آیلاگر
اگر از قبل از ILogger برای گزارشهای برنامه خود استفاده میکنید، این راهکار به شما امکان میدهد گزارشهای API تبلیغات گوگل را در گزارشهای موجود خود ادغام کنید.
ابتدا، یک LoggerFactory ایجاد کنید، یا اگر از قبل یکی دارید، فیلترهای مربوط به گزارشهای API گوگل ادز را اضافه کنید:
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);
});
سپس، از LoggerFactory برای ایجاد loggerهایی برای خلاصهها و جزئیات درخواستها و پاسخها استفاده کنید:
ILogger summaryLogger = loggerFactory.CreateLogger(TraceUtilities.SUMMARY_REQUEST_LOGS_SOURCE);
ILogger detailLogger = loggerFactory.CreateLogger(TraceUtilities.DETAILED_REQUEST_LOGS_SOURCE);
در نهایت، کتابخانه کلاینت را طوری پیکربندی کنید که ردپاهای خود را به نمونههای ILogger شما هدایت کند:
TraceUtilities.ConfigureSummaryLogger(summaryLogger);
TraceUtilities.ConfigureDetailLogger(detailLogger);
این راهکار به شما امکان میدهد گزارشهای درخواست و پاسخ API گوگل ادز را در چارچوبهای گزارشگیری موجود، مانند Log4Net، NLog و Serilog، ادغام کنید.
سطوح لاگ
این کتابخانه انواع مختلف رویدادها را در سطوح مختلف گزارش ثبت میکند. برای یک پاسخ موفق از API، خلاصه در INFO و درخواست و پاسخهای کامل در DEBUG ثبت میشوند.
در درخواستی که منجر به خطای API میشود، پیام خلاصه در WARN ثبت میشود و درخواست و پاسخ کامل در INFO ثبت میشوند.
خرابیهای جزئی در DEBUG ثبت میشوند.
درخواست شناسه
در بیشتر موارد، لاگهای ایجاد شده توسط کتابخانه کلاینت، جزئیات کافی برای عیبیابی مشکلات شما را ارائه میدهند. هنگام تماس با پشتیبانی ، یا لاگها را ارائه دهید (که به طور پیشفرض اطلاعات حساس را حذف میکند) یا شناسه درخواست را که به عنوان بخشی از لاگ پاسخ ثبت میشود، به اشتراک بگذارید.
اگر ترجیح میدهید خودتان شناسه درخواست را دریافت کنید، میتوانید از یکی از رویکردهای زیر استفاده کنید:
استخراج از طریق فراخوانیهای معمولی API
شما میتوانید از یک CallSetting سفارشی به همراه TrailingMetadataHandler برای دریافت شناسههای درخواست از فراخوانیهای unary معمولی استفاده کنید.
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);
استخراج از طریق فراخوانیهای API استریمینگ
شناسه درخواست به عنوان بخشی از شیء پاسخ برای فراخوانیهای API استریمینگ بازگردانده میشود. برای مثال، میتوانید شناسه درخواست را برای فراخوانی SearchStream به صورت زیر دریافت کنید:
// Get the GoogleAdsService.
GoogleAdsServiceClient googleAdsService = client.GetService(
Services.V22.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);
}
}
);
استثنائات
شناسه درخواست به عنوان بخشی از استثنای GoogleAdsException هر زمان که فراخوانی API با شکست مواجه شود، بازگردانده میشود.
try
{
// Make an API call.
...
}
catch (GoogleAdsException e)
{
string requestId = e.RequestId;
}
ثبت وقایع پیشرفته
اگر گزارش API جزئیات کافی به شما نمیدهد، گزارشگیری سطح پایین بیشتری را در سطح gRPC فعال کنید. به خاطر داشته باشید که خروجی میتواند حجیم باشد. گزارشهای gRPC در stderr نوشته میشوند، اما میتوانید گزارشگیرنده خودتان را همانطور که در این مثال نشان داده شده است، پیوست کنید. متغیرهای محیطی پشتیبانی شده .
Environment.SetEnvironmentVariable("GRPC_VERBOSITY", "DEBUG");
Environment.SetEnvironmentVariable("GRPC_TRACE", "http");
GrpcEnvironment.SetLogger(new ConsoleLogger());
پیکربندی TraceListener با استفاده از App.config (نسخه قدیمی)
اگر برنامه شما برای یک هدف .NET Framework ساخته شده است، میتوانید پیکربندی ثبت وقایع را از فایل App.config یا Web.config برنامه خود بارگذاری کنید. این یک قابلیت قدیمی .NET است که برای برنامههای ساخته شده برای اهداف .NET Core پشتیبانی نمیشود.
برای استفاده از این قابلیت، باید تغییرات زیر را به فایل پیکربندی خود اضافه کنید:
قطعه کد زیر را در زیر بخش
<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>قطعه کد زیر را در زیر بخش
<configSections>اضافه کنید.<section name="system.diagnostics" type="System.Diagnostics.SystemDiagnosticsSection"/>سپس
App.configشما به این شکل خواهد بود:<?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>