로깅

<ph type="x-smartling-placeholder">

.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 및 Serilog)를 지원합니다.

로그 수준

라이브러리는 다양한 유형의 이벤트를 여러 로그 수준으로 로깅합니다. API 응답이 성공적으로 실행되면 요약이 INFO에 로깅되며 요청 및 응답은 DEBUG에 기록됩니다.

API 오류가 발생하는 요청에서 요약 메시지는 다음에 기록됩니다. WARN로 변경되며 전체 요청과 응답은 INFO에 로깅됩니다.

부분 실패는 DEBUG에 로깅됩니다.

요청 ID

대부분의 경우 클라이언트 라이브러리에서 생성되는 로그만으로도 문제 해결에 도움이 됩니다 지원팀에 문의할 때 포럼/별칭이 있는 경우 로그 (민감한 정보를 요청 ID를 공유( 응답 로그의 일부).

요청 ID를 직접 캡처하려면 접근 방식:

일반적인 API 호출을 통한 추출

TrailingMetadataHandler가 있는 맞춤 CallSetting를 사용하여 캡처할 수 있습니다. 요청 ID를 생성할 수 있습니다.

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 호출을 통한 추출

요청 ID는 스트리밍 API에 대한 응답 객체의 일부로 반환됩니다. 있습니다. 예를 들어 SearchStream 호출의 요청 ID를 다음과 같이 가져올 수 있습니다. 다음과 같습니다.

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

예외

요청 ID가 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());

App.config를 사용한 TraceListener 구성 (기존)

.NET Framework 타겟용으로 앱을 빌드하는 경우 앱의 App.config 또는 Web.config 파일에서 구성을 삭제합니다. 이것은 .NET Core용으로 빌드된 앱에서 지원되지 않는 기존 .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 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>