Registro

La biblioteca cliente .NET registra las solicitudes, respuestas y mensajes de resumen realizados a la API de Google Ads. Los registros se pueden escribir TraceListener: o a una aplicación ILogger instancia.

TraceListener

Puedes habilitar el registro en un TraceListener si agregas la siguiente línea a tu Main antes de realizar llamadas a la 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

Si ya usas un ILogger para los registros de tu aplicación, esta solución le permite integrar los registros de la API de Google Ads en sus registros existentes.

Primero, crea un LoggerFactory o, si ya tienes uno, agrega los filtros. para los registros de la API de Google Ads:

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

Luego, usa LoggerFactory para crear registradores para la solicitud y la respuesta. resúmenes y detalles:

ILogger summaryLogger = loggerFactory.CreateLogger(TraceUtilities.SUMMARY_REQUEST_LOGS_SOURCE);
ILogger detailLogger = loggerFactory.CreateLogger(TraceUtilities.DETAILED_REQUEST_LOGS_SOURCE);

Por último, configura la biblioteca cliente para redireccionar sus registros a tu ILogger instancias:

TraceUtilities.ConfigureSummaryLogger(summaryLogger);
TraceUtilities.ConfigureDetailLogger(detailLogger);

Esta solución te permite integrar los registros de solicitudes y respuestas de la API de Google Ads en de registro existentes, como Log4Net, NLog y Serilog.

Niveles de registro

La biblioteca registra diferentes tipos de eventos en diferentes niveles de registro. Para un respuesta exitosa de la API, el resumen se registra en INFO y el valor completo solicitudes y respuestas se registran en DEBUG.

En una solicitud que da como resultado un error de API, el mensaje de resumen se registra en WARN, y la solicitud y la respuesta completas se registran en INFO.

Las fallas parciales se registran en DEBUG.

ID de solicitud

En la mayoría de los casos, los registros generados por la biblioteca cliente proporcionan suficiente más detalles para solucionar los problemas. Cuando te comuniques con el equipo de asistencia o los alias, puedes proporcionar los registros (que ocultan información de forma predeterminada) o simplemente compartir el ID de solicitud (que se registra como (parte del registro de respuestas).

Si prefieres captar el ID de solicitud por tu cuenta, puedes usar uno de los los siguientes enfoques:

Extracción mediante llamadas a la API comunes

Puedes usar un CallSetting personalizado con un TrailingMetadataHandler para capturar de llamadas unarias normales.

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

Extracción mediante llamadas a la API de transmisión

El ID de solicitud se muestra como parte del objeto de respuesta para la API de transmisión. llamadas. Por ejemplo, puedes obtener el ID de solicitud de una llamada SearchStream como sigue:

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

Excepciones

El ID de solicitud se muestra como parte de la excepción GoogleAdsException. cuando falla una llamada a la API.

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

Registro avanzado

Si el registro de la API no proporciona suficientes detalles, habilita más registros de bajo nivel en el nivel de gRPC. Ten en cuenta que el resultado puede ser voluminoso. Los registros de gRPC se escriben en stderr, pero puedes adjuntar tu propio registrador como se muestra a continuación. Entorno compatible variables.

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

Configuración de TraceListener con App.config (heredado)

Si tu app se compila para un destino de .NET Framework, puedes cargar los registros del archivo App.config o Web.config de tu app. Este es un Función heredada de .NET que no es compatible con aplicaciones compiladas para .NET Core objetivos.

Para usar esta función, debes agregar los siguientes cambios a tu configuración archivo:

  1. Agrega el siguiente fragmento en la sección <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. Agrega el siguiente fragmento en la sección <configSections>.

    <section name="system.diagnostics" type="System.Diagnostics.SystemDiagnosticsSection"/>
    

    Luego, tu App.config se verá de la siguiente manera:

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