我试图通过日志记录让API服务在ASP.NET Core3中运行,但是当我试图从依赖项服务中检索ILogger时,我总是得到一个错误。我想我已经遵循了我能找到的例子,但我不断得到:
“System.InvalidOperationException:”在尝试激活'GMT.Beacon.service.Startup'时,无法解析'Microsoft.Extensions.Logging.ILogger'1[gmt.beacon.service.Startup]类型的服务。‘“
我使用默认模板来启动项目,因此它通过默认构建器设置web主机,根据文档,默认构建器应该自动配置日志记录。此外,我尝试手动添加提供程序,但我得到了相同的错误。我觉得我错过了一些明显的东西,但不知道是什么。
下面是发生错误的Program.cs类:
public class Program {
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => {
webBuilder.UseStartup<Startup>();
});
public static void Main(string[] args) {
var host = CreateHostBuilder(args).Build();
var logger = host.Services.GetRequiredService<ILogger<Program>>();
logger.LogInformation("Test log entry.");
host.Run();
}
}
在Startup.cs类中,下面是构造函数:
public Startup(IConfiguration config, IHostEnvironment hosting, ILogger<Startup> logger) {
_hosting = hosting;
_config = config;
_logger = logger;
_logger.LogInformation($"{DateTime.UtcNow:R} - Starting (Environment={_hosting.EnvironmentName}; " + $"InformationalVersion={Assembly.GetEntryAssembly().GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion};");
}
var host = CreateHostBuilder(args).Build();
我还尝试手动配置日志记录(使用下面的代码),但返回相同的错误。
Host.CreateDefaultBuilder(args)
.ConfigureLogging((hostingContext, logging) => {
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddEventSourceLogger();
logging.AddConsole();
logging.AddDebug();
})
.ConfigureWebHostDefaults(webBuilder => {
webBuilder.UseStartup<Startup>();
});
是否有人发现此设置存在问题,或者知道如何正确配置ASP.NET Core3中的日志子系统?
这在ASP.NET Core3中有所改变。请参见此处的公告:
TLDR:泛型主机支持启动构造函数注入的唯一类型是iHostEnvironment
、iWebHostEnvironment
和iconfiguration
。使用WebHost的应用程序不受影响。
Ilogger
可注入到configure
中,因此您可以从那里访问它以记录启动消息:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILogger<Startup> logger)
{
logger.LogInformation(...);
// ...
}
我刚刚为我们的微服务环境在前端创建了简单的Zuul代理,但现在我想将所有条目记录到通过代理的日志文件中。 做任何我需要做的事情。
我想在我的应用程序中使用SLF4J+logback用于两个目的--日志和审计。 14:41:57.978[main]信息AUDIT_LOGGER-110欢迎使用main 如何确保审核消息在审核记录器下只出现一次?
当我尝试运行这段代码时,我在Level Object中面临一些问题。 错误:
我正在迁移一个遗留的应用程序来使用logback,在这个过程中我试图保持所有的旧功能以相同的方式工作。遗留应用程序所做的一件事是,如果无法写入日志文件(由于空间不足、权限不正确等原因),则将日志记录到控制台 对于logback,似乎应该由StatusListener来处理这个问题,我可以使用getOrigin获得筛选后的附加程序,但我不知道如何获得与origin附加程序相关联的日志记录程序。有可能
问题内容: 当运行Spring / Hibernate应用程序时,我在控制台上看到以下不需要的输出: 我已经像这样配置了Log4j记录器: 如何使这些消息静音? 问题答案: 我相当确定您正在看到这些SQL语句,因为Hibernate配置中某处的属性“ hibernate.show_sql”设置为true。找到该设置并将其更改为false。
Elasticsearch 作为一个服务,本身也会记录很多日志信息。默认情况下,日志都放在 $ES_HOME/logs/ 目录里。 日志配置在 Elasticsearch 5.0 中改成了使用 log4j2.properties 文件配置,包括日志滚动的方式、命名等,都和标准的 log4j2 一样。唯一的特点是:Elasticsearch 导出了一个变量叫 ${sys:es.logs},指向你在