Thư viện ứng dụng .NET ghi lại các yêu cầu, phản hồi và tin nhắn tóm tắt được gửi đến
API Google Ads. Bạn có thể ghi nhật ký vào một
TraceListener
!
hoặc vào một tham số tuỳ chỉnh
ILogger
thực thể.
TraceListener
Bạn có thể bật tính năng ghi nhật ký vào TraceListener
bằng cách thêm dòng sau vào
Main
trước khi thực hiện bất kỳ lệnh gọi API nào.
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
Nếu bạn đang sử dụng ILogger
cho nhật ký ứng dụng, thì đây là giải pháp
cho phép bạn tích hợp nhật ký API Google Ads trong nhật ký hiện có.
Trước tiên, hãy tạo một LoggerFactory
hoặc thêm các bộ lọc (nếu bạn đã có)
đối với nhật ký API 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);
});
Sau đó, sử dụng LoggerFactory
để tạo trình ghi nhật ký cho yêu cầu và phản hồi
tóm tắt và chi tiết:
ILogger summaryLogger = loggerFactory.CreateLogger(TraceUtilities.SUMMARY_REQUEST_LOGS_SOURCE);
ILogger detailLogger = loggerFactory.CreateLogger(TraceUtilities.DETAILED_REQUEST_LOGS_SOURCE);
Cuối cùng, hãy định cấu hình thư viện ứng dụng để chuyển hướng dấu vết của thư viện này đến ILogger
của bạn
trường hợp:
TraceUtilities.ConfigureSummaryLogger(summaryLogger);
TraceUtilities.ConfigureDetailLogger(detailLogger);
Giải pháp này cho phép bạn tích hợp nhật ký phản hồi và yêu cầu của API Google Ads vào các khung ghi nhật ký hiện có, chẳng hạn như Log4Net, NLog và Serilog.
Các cấp độ nhật ký
Thư viện ghi lại các loại sự kiện khác nhau vào các cấp độ nhật ký khác nhau. Đối với
phản hồi API thành công, bản tóm tắt sẽ được ghi lại vào INFO
và toàn bộ
và phản hồi được ghi lại vào DEBUG
.
Trong một yêu cầu dẫn đến lỗi API, thông báo tóm tắt sẽ được ghi lại tại
WARN
, toàn bộ yêu cầu và phản hồi sẽ được ghi lại vào INFO
.
Lỗi một phần được ghi lại vào DEBUG
.
Mã yêu cầu
Trong hầu hết các trường hợp, nhật ký do thư viện ứng dụng tạo ra cung cấp đầy đủ để khắc phục sự cố. Khi liên hệ với nhóm hỗ trợ diễn đàn/email đại diện, bạn có thể cung cấp nhật ký (để loại bỏ thông tin nhạy cảm) thông tin theo mặc định) hoặc chỉ chia sẻ mã yêu cầu (được ghi lại dưới dạng của nhật ký phản hồi).
Nếu muốn tự lấy mã yêu cầu, bạn có thể sử dụng một trong các phương pháp sau:
Trích xuất thông qua các lệnh gọi API thông thường
Bạn có thể sử dụng CallSetting
tuỳ chỉnh cùng với TrailingMetadataHandler
để chụp
mã yêu cầu từ các lệnh gọi đơn phân thông thường.
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);
Trích xuất thông qua các lệnh gọi API truyền trực tuyến
Mã yêu cầu được trả về như một phần của đối tượng phản hồi cho API truyền trực tuyến
cuộc gọi. Ví dụ: Bạn có thể lấy mã yêu cầu cho lệnh gọi SearchStream
dưới dạng
sau:
// 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);
}
}
);
Ngoại lệ
Mã yêu cầu được trả về như một phần của ngoại lệ GoogleAdsException
bất cứ khi nào lệnh gọi API không thành công.
try
{
// Make an API call.
...
}
catch (GoogleAdsException e)
{
string requestId = e.RequestId;
}
Ghi nhật ký nâng cao
Nếu nhật ký API không cung cấp đủ thông tin chi tiết, hãy bật thêm tính năng ghi nhật ký cấp thấp tại cấp gRPC. Xin lưu ý rằng dữ liệu đầu ra có thể rất lớn. Nhật ký gRPC được ghi vào stderr, nhưng bạn có thể đính kèm trình ghi nhật ký của riêng mình như minh hoạ dưới đây. Môi trường được hỗ trợ .
Environment.SetEnvironmentVariable("GRPC_VERBOSITY", "DEBUG");
Environment.SetEnvironmentVariable("GRPC_TRACE", "http");
GrpcEnvironment.SetLogger(new ConsoleLogger());
Cấu hình TraceListener sử dụng App.config (cũ)
Nếu ứng dụng của bạn xây dựng cho mục tiêu .NET Framework, bạn có thể tải nhật ký
cấu hình từ tệp App.config
hoặc Web.config
của ứng dụng. Đây là một
Chức năng .NET cũ không được hỗ trợ cho các ứng dụng được tạo cho .NET Core
mục tiêu.
Để sử dụng tính năng này, bạn cần thêm các thay đổi sau vào cấu hình của mình tệp:
Thêm đoạn mã sau trong phầ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>
Thêm đoạn mã sau trong phần
<configSections>
.<section name="system.diagnostics" type="System.Diagnostics.SystemDiagnosticsSection"/>
Khi đó,
App.config
của bạn sẽ có dạng như sau:<?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>