ورود به سیستم

کتابخانه سرویس گیرنده دات نت درخواست ها، پاسخ ها و پیام های خلاصه ارسال شده به Google Ads API را ثبت می کند. گزارش‌ها را می‌توان در یک TraceListener سفارشی یا در یک نمونه سفارشی ILogger نوشت.

TraceListener

قبل از برقراری تماس API، می‌توانید ورود به TraceListener را با افزودن خط زیر در روش Main خود فعال کنید.

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 برای گزارش های برنامه خود استفاده می کنید، این راه حل به شما امکان می دهد گزارش های API Google Ads را در گزارش های موجود خود ادغام کنید.

ابتدا یک LoggerFactory ایجاد کنید، یا اگر قبلاً دارید، فیلترها را برای گزارش‌های Google Ads 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 برای ایجاد لاگر برای خلاصه و جزئیات درخواست و پاسخ استفاده کنید:

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);

این راه‌حل به شما امکان می‌دهد گزارش‌های درخواست و پاسخ Google Ads 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.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);
        }
    }
);

استثنائات

هر زمان که تماس API ناموفق باشد، شناسه درخواست به عنوان بخشی از استثنای GoogleAdsException برگردانده می‌شود.

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 Core پشتیبانی نمی شود.

برای استفاده از این ویژگی، باید تغییرات زیر را به فایل پیکربندی خود اضافه کنید:

  1. قطعه زیر را در قسمت <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>
    
  2. قطعه زیر را در قسمت <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>