我已经基于documentation为我的ASP.Net Core 2.2 Web应用程序配置了Serilog SQL服务器接收器。既不会创建“日志”表,也不会记录任何错误。我想念什么?
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; }
}
答案 0 :(得分:0)
最后,它是非常直截了当的。我的Program.cs文件中不需要更改,只需配置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
}
}
]
}
}