Serilog SQL Server接收器日志记录未记录任何错误 [英] No errors logged for Serilog SQL server sink logging
本文介绍了Serilog SQL Server接收器日志记录未记录任何错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已基于为我的ASP.Net Core 2.2 Web应用程序配置了Serilog SQL服务器接收器.文档.既不会创建日志"表,也不会记录任何错误.我想念什么?
I have configured Serilog SQL server sink for my ASP.Net Core 2.2 web application based on the documentation. Neither the Logs table get created nor are any errors logged. What am I missing?
AppSettings.Development.json:
{
"ConnectionStrings": {
"SQLServerConnectionString": "<ActualDataBaseConnectionString>"
},
"Serilog": {
"Using": [ "Serilog.Sinks.MSSqlServer" ],
"MinimumLevel": "Information",
"WriteTo": [
{
"Name": "MSSqlServer",
"Args": {
"connectionString": "SQLServerConnectionString",
"tableName": "Logs",
"autoCreateSqlTable": true
}
}
]
}
}
Program.cs:
public class Program
{
private static string _environmentName;
public static void Main(string[] args)
{
try
{
var iWebHost = CreateWebHostBuilder(args).Build();
var path = Directory.GetCurrentDirectory();
var configuration = new ConfigurationBuilder()
.SetBasePath(path)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{_environmentName}.json", optional: false, reloadOnChange: true)
.Build();
var serilog = new Serilog();
configuration.GetSection("Serilog").Bind(serilog);
var logger = new LoggerConfiguration()
.WriteTo.MSSqlServer(serilog.WriteTo[0].Args.connectionString, serilog.WriteTo[0].Args.tableName)
.ReadFrom.AppSettings()
.CreateLogger();
Log.Logger = logger;
Log.Information("Application starting");
iWebHost.Run();
}
catch(Exception exception)
{
Log.Error(exception.ToString());
}
finally
{
Log.CloseAndFlush();
}
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging((webHostBuilderContext, iLoggingBuilder) =>
{
iLoggingBuilder.AddSerilog();
_environmentName = webHostBuilderContext.HostingEnvironment.EnvironmentName;
})
.UseStartup<Startup>();
}
public class Args
{
public string connectionString { get; set; }
public string tableName { get; set; }
public bool autoCreateSqlTable { get; set; }
}
public class WriteTo
{
public string Name { get; set; }
public Args Args { get; set; }
}
public class Serilog
{
public List<string> Using { get; set; }
public string MinimumLevel { get; set; }
public List<WriteTo> WriteTo { get; set; }
}
推荐答案
最后,它是非常直截了当的.我的Program.cs文件中不需要更改,只需配置AppSettings.json.
In the end it was pretty straight foward. No changes were needed in my Program.cs file, I just had to configure the AppSettings.json.
Program.cs:
public static void Main(string[] args)
{
try
{
var iWebHost = CreateWebHostBuilder(args).Build();
var path = Directory.GetCurrentDirectory();
var configuration = new ConfigurationBuilder()
.SetBasePath(path)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{_environmentName}.json", optional: false, reloadOnChange: true)
.Build();
var logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.ReadFrom.Configuration(configuration)
.CreateLogger();
Log.Logger = logger;
Log.Information("Application starting");
iWebHost.Run();
}
catch(Exception exception)
{
Log.Error(exception.ToString());
}
finally
{
Log.CloseAndFlush();
}
}
AppSettings.development.json:
{
"Serilog": {
"Using": [ "Serilog.Sinks.MSSqlServer" ],
"MinimumLevel": "Information",
"WriteTo": [
{
"Name": "MSSqlServer",
"Args": {
"connectionString": "<DatabaseConnectionString>",
"tableName": "Logs",
"autoCreateSqlTable": true
}
}
]
}
}
这篇关于Serilog SQL Server接收器日志记录未记录任何错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文