پیکربندی ورود به سیستم، پیکربندی ورود به سیستم

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

TraceListener

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

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

ابتدا، یک LoggerFactory ایجاد کنید، یا اگر از قبل یکی دارید، فیلترهای مربوط به گزارش‌های API گوگل ادز را اضافه کنید:

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

سپس، از 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 معمولی unary

می‌توانید از یک CallSettings سفارشی به همراه TrailingMetadataHandler برای دریافت شناسه‌های درخواست از فراخوانی‌های unary معمولی استفاده کنید:

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

استخراج از فراخوانی‌های API استریمینگ

شناسه درخواست به عنوان بخشی از شیء پاسخ برای فراخوانی‌های API استریمینگ بازگردانده می‌شود. برای مثال، می‌توانید شناسه درخواست را برای فراخوانی SearchStream به صورت زیر دریافت کنید:

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

استثنائات

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

try
{
    // Make an API call.
}
catch (GoogleAdsException e)
{
    string requestId = e.RequestId;
    Console.WriteLine($"Failed Request ID: {requestId}");
}

پیکربندی گزارش‌گیری پیشرفته

اگر گزارش API جزئیات کافی به شما نمی‌دهد، گزارش‌گیری سطح پایین‌تر را در سطح انتقال gRPC فعال کنید. به خاطر داشته باشید که خروجی می‌تواند حجیم باشد.

هنگام استفاده از انتقال پیش‌فرض Grpc.Net.Client ، گزارش‌های سطح انتقال را از طریق ارائه‌دهنده ILogger در .NET با اضافه کردن یک فیلتر برای دسته Grpc پیکربندی کنید (برای مثال، builder.AddFilter("Grpc", LogLevel.Debug) ).

اگر از انتقال قدیمی Grpc.Core استفاده می‌کنید ( UseGrpcCore = true )، گزارش‌های gRPC به طور پیش‌فرض در stderr نوشته می‌شوند، یا می‌توانید گزارش‌گیرنده خودتان را همانطور که در مثال زیر نشان داده شده است، پیوست کنید. برای جزئیات بیشتر، به متغیرهای محیطی پشتیبانی شده gRPC مراجعه کنید.

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

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

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