gpt4 book ai didi

asp.net-core - Google.Cloud.Diagnostics.AspNetCore3 调试级别不起作用

转载 作者:行者123 更新时间:2023-12-05 01:05:17 25 4
gpt4 key购买 nike

考虑一个向导生成的 ASP.NET Core 项目 (NET 6)。将 Google.Cloud.Diagnostics.AspNetCore3 NuGet 包和 services.AddGoogleDiagnosticsForAspNetCore() 添加到 Startup.cs。让 GOOGLE_APPLICATION_CREDENTIALS 环境变量指向您的服务帐户 JSON 的路径。

在应用程序的某处(例如 Controller )添加以下内容:

_logger.LogDebug("Nope");
_logger.LogInformation("Yeah");

Google Cloud Logs Explorer 仅显示"is"(没有特定过滤器)。我的 appsettings.json 看起来像:

"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
}

据我了解,"Default": "Debug" 应该适用于缺少更具体配置的任何地方。

为什么我没有看到“Nope”被记录?有什么明显的我失踪了吗?值得一提的是,Visual Studio 调试输出和控制台输出都按预期显示 Nope/Yeah。

最佳答案

简短回答:Google.Cloud.Diagnostics.AspNetCore3 不使用 appsettings.json(至少目前如此),必须明确设置日志级别。

接下来是冗长的答案和工作代码。

要将 Google 诊断添加到我们的项目中,我们有 3 个重载的 ...AddGoogleDiagnosticsForAspNetCore(...) 可用,还有 ...AddGoogle(...) 只是为了使用我们需要的服务,比如日志服务。 (开头的...因dotnet版本而异,末尾为示例)。

1- 在 GCP 环境中,...AddGoogleDiagnosticsForAspNetCore() 签名用于设置诊断的默认值。服务详情从 GCP 获取。

2- 在 GCP 环境中,...AddGoogleDiagnosticsForAspNetCore(AspNetCoreTraceOptions, LoggingServiceOptions, ErrorReportingServiceOptions) 签名我们可以设置 3 种类型的选项:AspNet Tracing、Logging Service 和 Error Reporting Service。

  • 对于这个用例,如果我们只想要日志服务,我们可以使用位置参数 (null,new LoggingServiceOptions{...},null)(不需要最后一个 null)或命名参数 (loggingOptions: new LoggingServiceOptions{...})
  • LoggingServicesOptions{...} 中有很多设置,但仅出于日志级别目的,以下内容就足够了:new LoggingServiceOptions{ Options = LoggingOptions.Create(logLevel: LogLevel.调试)}

现在我们来到了重要的地方。尽管文档隐含地涵盖了足够多的内容,但并未明确说明此用例将直接设置选项,而不是服务。

3- 虽然没有明确说明,但此用途适用于 GCP 之外的情况或无法正确设置 GCP(不确定如何设置!?) AddGoogleDiagnosticsForAspNetCore( projectId, serviceName, serviceVersion, TraceOptions, LoggingOptions, ErrorReportingOptions )。乍一看,这可能类似于第二个签名,但它没有设置服务选项。

  • 当看到第一个或第二个签名的 Project ID was not provided and could not be autodetected 消息时,他们必须将其作为参数提供,该参数会立即切换功能以使用此第三个签名。
  • 在这种情况下,如果我们只想要日志服务,它必须以 (projectId,null,null,null,LoggingOptions...,null) 的形式用于位置参数(最后一个 null 不是必需的)或 (projectId:"some ID",loggingOptions: LoggingOptions...) 用于命名参数
  • LoggingOptions... 就是LoggingOptions.Create(logLevel: LogLevel.Debug) 设置日志级别。

4- 除了在将 Google 诊断添加到服务时添加这些详细信息外,我们还可以在设置配置时添加日志记录选项:...AddGoogle(LoggingServiceOptions{...})。但是在这个使用中,我们需要在里面提供一个项目Id; new LoggingServiceOptions{ ProjectId = "some ID", Options = LoggingOptions.Create(logLevel: LogLevel.Debug) }


填写...

dotnet 6 开始使用新的顶级语句。所以我们有以下步骤要遵循。

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddGoogleDiagnosticsForAspNetCore(
projectId: "some ID",
loggingOptions: LoggingOptions.Create(logLevel: LogLevel.Debug)
);

// or
var builder = WebApplication.CreateBuilder(args);
builder.Logging.AddGoogle(
new LoggingServiceOptions {
ProjectId = "some ID",
Options=LoggingOptions.Create(logLevel:LogLevel.Debug)
}
);

由于 OP 提到了 Startup.cs 的使用,该项目使用旧样式,因此这些是所需的部分。

// inside ConfigureServices
services.AddGoogleDiagnosticsForAspNetCore(
projectId: "some ID",
loggingOptions: LoggingOptions.Create(logLevel: LogLevel.Debug)
);

// or
// before using "UseStartup"
.ConfigureLogging(
builder => builder.AddGoogle(
new LoggingServiceOptions {
ProjectId = "some ID",
Options=LoggingOptions.Create(logLevel:LogLevel.Debug)
}
)
)

额外

我们可以从配置文件中读取(顶级格式)

var builder = WebApplication.CreateBuilder(args);
var config = builder.Configuration;
builder.Services.AddGoogleDiagnosticsForAspNetCore(
projectId:config["GCP:ID"],
loggingOptions: LoggingOptions.Create(
logLevel: Enum.Parse<LogLevel>(config["GCP:Logging:LogLevel:Default"]
)));

并在 appsettings.json

中添加 GCP 部分
  "GCP":{
"ID":"some ID",
"Logging":{
"LogLevel":{
"Default":"Debug"
}
}
}

关于asp.net-core - Google.Cloud.Diagnostics.AspNetCore3 调试级别不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70729234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com