التسجيل

تسجل مكتبة برامج NET .الطلبات والاستجابات ورسائل الملخص التي تم إجراؤها إلى Google Ads API ويمكن كتابة السجلات إلى مجلد TraceListener، أو بحساب مخصص ILogger مثال.

TraceListener

يمكنك تفعيل تسجيل الدخول إلى 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

إذا كنت تستخدم ILogger لسجلات التطبيق، سيستخدم هذا الحلّ يتيح لك دمج سجلّات Google Ads API في سجلّاتك الحالية.

أولاً، أنشئ 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 وSirilog.

مستويات السجلّ

تسجِّل المكتبة أنواعًا مختلفة من الأحداث على مستويات السجلّ المختلفة. بالنسبة إلى استجابة ناجحة من واجهة برمجة التطبيقات، وتسجيل الملخص في INFO، تم تسجيل الطلب والردود على DEBUG.

عند حدوث خطأ في واجهة برمجة التطبيقات، يتم تسجيل رسالة الملخص على WARN، ويتم تسجيل الطلب والردّ الكاملَين على الرابط INFO.

يتم تسجيل الأخطاء الجزئية في DEBUG.

معرّف الطلب

في معظم الحالات، توفر السجلات التي أنشأتها مكتبة البرامج بيانات كافية تفاصيل استكشاف الأخطاء وإصلاحها. عند التواصل مع فريق الدعم المنتدى/الأسماء المستعارة، يمكنك إما تقديم السجلات (التي تخفي المعلومات بشكل افتراضي) أو مشاركة مُعرّف الطلب (الذي يتم تسجيله من سجل الاستجابة).

إذا كنت تفضّل تسجيل رقم تعريف الطلب بنفسك، يمكنك استخدام أحد النُهُج التالية:

الاستخراج من خلال طلبات البيانات العادية من واجهة برمجة التطبيقات

يمكنك استخدام CallSetting مخصّص مع TrailingMetadataHandler لالتقاط صورة. طلبات المعرفات من المكالمات الأحادية العادية.

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

الاستخراج من خلال بث طلبات البيانات من واجهة برمجة التطبيقات

يتم عرض رقم تعريف الطلب كجزء من عنصر الاستجابة لـ Streaming 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);
        }
    }
);

الاستثناءات

يتم عرض معرّف الطلب كجزء من استثناء GoogleAdsException. كلما فشل طلب بيانات من واجهة برمجة التطبيقات.

try
{
  // Make an API call.
  ...
}
catch (GoogleAdsException e)
{
    string requestId = e.RequestId;
}

التسجيل المتقدِّم

إذا لم يمنحك سجل واجهة برمجة التطبيقات تفاصيل كافية، قم بتفعيل المزيد من تسجيل الدخول منخفض المستوى في مستوى gRPC. يُرجى العِلم أنّ الناتج يمكن أن يكون هائلاً. سجلّات gRPC إلى stderr، ولكن يمكنك إرفاق المسجل كما هو موضح أدناه. البيئة المتاحة المتغيرات.

Environment.SetEnvironmentVariable("GRPC_VERBOSITY", "DEBUG");
Environment.SetEnvironmentVariable("GRPC_TRACE", "http");
GrpcEnvironment.SetLogger(new ConsoleLogger());

ضبط TraceListener باستخدام App.config (القديم)

إذا كان تطبيقك يعمل على إنشاء هدف NETframe.، يمكنك تحميل ملف تسجيل الإعدادات من ملف App.config أو Web.config في تطبيقك. هذا هو وظيفة .NET القديمة غير المتوافقة مع التطبيقات المصمَّمة لنظام .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>