جارٍ التسجيل

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

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

تتبّع المستمع

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

أولاً، أنشئ LoggerFactory، أو إذا كنت قد أنشأت واحدًا من قبل، فأضف الفلاتر لسجلات إعلانات Google 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 API وسجلّات الاستجابة في أُطر عمل التسجيل الحالية، مثل Log4Net وNLog وSerilog.

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

تسجِّل المكتبة أنواعًا مختلفة من الأحداث على مستويات سجلّات مختلفة. للحصول على استجابة ناجحة من واجهة برمجة التطبيقات، يتم تسجيل الملخص في 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);

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

يتم عرض معرّف الطلب كجزء من كائن الاستجابة لاستدعاءات واجهة برمجة تطبيقات البث. على سبيل المثال، يمكنك الحصول على معرّف الطلب لمكالمة في SearchStream على النحو التالي:

// Get the GoogleAdsService.
GoogleAdsServiceClient googleAdsService = client.GetService(
    Services.V13.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 (قديم)

إذا كان تطبيقك مصمّمًا لهدف NET Framework، يمكنك تحميل إعداد التسجيل من ملف 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>