【发布时间】:2018-05-16 19:46:51
【问题描述】:
我有 ASP.NET Core 应用程序。我正在使用Microsoft.Extensions.Logging.ILogger 接口和Serilog 日志记录提供程序。
在生产环境中,日志级别设置为Error。所以低于Error loglevel 的任何内容都不会被记录。
Microsoft.Extensions.Logging 中是否有可用的 Force 日志记录,无论日志级别设置如何,它都会记录消息?
基本上我想(暂时)记录一些信息而不将 LogLevel 设置为 Information,因为那样会记录所有其他不相关的信息消息。
更新 1
所以我根据建议更新了我的 appsettings.json,但是没有用。请注意,serilog 也有自己的日志级别,我已将其注释掉。但还是不行。
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Error",
"MyUserService": "Information"
}
},
"Serilog": {
"Using": [ "Serilog.Sinks.MSSqlServer" ],
//"MinimumLevel": "Error",
"WriteTo": [
{
"Name": "MSSqlServer",
"Args": {
//"restrictedToMinimumLevel": "Error",
"connectionString": "Data Source=.\\SQLExpress;Initial Catalog=MyDataBase;Integrated Security=True;MultipleActiveResultSets=True",
"tableName": "Logs"
}
}
],
"Properties": {
"Application": "MyApplication"
}
}
然后在 MyUserService 中
public class MyUserService : BaseService, IMyUserService
{
private readonly ILogger<MyUserService> _logger;
public MyUserService(MyDBContext dbContext, ILogger<MyUserService> logger)
: base(dbContext)
{
_logger = logger;
}
public async Task DoSomethig()
{
_logger.LogInformation("Log something meaningful here");
}
}
在program.cs中
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseApplicationInsights()
.UseUrls("http://*:40006")
.ConfigureAppConfiguration((hostingContext, config) =>
{
//removed for brevity
})
.ConfigureLogging((hostingContext, logging) =>
{
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(hostingContext.Configuration)
.CreateLogger();
logging.AddSerilog();
})
.Build();
【问题讨论】:
-
你能不能把它记录为错误或致命等?一般来说,接收器使用最小栏来有效地停止在第一个实例中生成的消息
-
是的,如果我不能强制记录,那是我最后的选择
-
我在问为什么你认为你需要一个力量来改变单个消息的级别才能达到你的结果?
-
因为我要记录的不是错误,而是有助于我们做出决定的信息(一些元数据)。此外,我们还有外部
watch服务,如果记录任何错误,它会向所有人发送电子邮件。我试图避免这种情况 -
好的。您可以为另一个上下文创建一个记录器并将其标记为最小:信息但将其打开吗?或者降级您不想调试的其他信息?底线:没有效率的力量,但也有一致性的原因
标签: asp.net-core serilog coreclr .net-core-logging asp.net-core-logging