Logging

ไลบรารีของไคลเอ็นต์ .NET จะบันทึกคำขอ การตอบกลับ และข้อความสรุปที่ส่งไปยัง Google Ads API สามารถเขียนบันทึกไปยัง TraceListener หรือช่องที่กำหนดเอง ILogger อินสแตนซ์

TraceListener

คุณเปิดใช้การเข้าสู่ระบบไปยัง TraceListener ได้ด้วยการเพิ่มบรรทัดต่อไปนี้ใน Main ก่อนทำการเรียก API

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 และ Serilog

ระดับบันทึก

ไลบรารีจะบันทึกเหตุการณ์ประเภทต่างๆ ไว้ในระดับการบันทึกที่ต่างกัน สำหรับ การตอบกลับจาก API ที่สำเร็จ ข้อมูลสรุปจะถูกบันทึกไว้เมื่อ INFO และ บันทึกคำขอและการตอบกลับได้ที่ DEBUG

ในคำขอที่ทำให้เกิดข้อผิดพลาด API ข้อความสรุปจะถูกบันทึกที่ WARN ระบบจะบันทึกคำขอและการตอบกลับทั้งหมดไว้ที่ INFO

การดำเนินการไม่สำเร็จบางส่วนจะบันทึกที่ DEBUG

รหัสคำขอ

ในกรณีส่วนใหญ่ บันทึกที่สร้างขึ้นโดยไลบรารีของไคลเอ็นต์จะเพียงพอ รายละเอียดเพื่อแก้ปัญหาของคุณ เมื่อติดต่อทีมสนับสนุน ฟอรัม/ชื่อแทน คุณสามารถมอบบันทึก (ซึ่งจะปกปิดความละเอียดอ่อน ข้อมูลโดยค่าเริ่มต้น) หรือแชร์เพียงรหัสคำขอ (ซึ่งบันทึกเป็น ของบันทึกการตอบกลับ)

หากคุณต้องการบันทึกรหัสคำขอด้วยตัวเอง คุณสามารถใช้หนึ่งใน วิธีการต่อไปนี้

การดึงข้อมูลผ่านการเรียก API ปกติ

คุณสามารถใช้ 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);

การดึงข้อมูลผ่านการเรียก 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);
        }
    }
);

ข้อยกเว้น

รหัสคำขอจะส่งกลับมาเป็นส่วนหนึ่งของข้อยกเว้น 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 เป้าหมาย

หากต้องการใช้ฟีเจอร์นี้ คุณต้องเพิ่มการเปลี่ยนแปลงต่อไปนี้ในการกำหนดค่า ไฟล์:

  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>