我的项目基于.Net5.0核心 MVC 和项目安装了以下 nuget 软件包。
<PackageReference Include="Serilog" Version="2.10.0" />
<PackageReference Include="Serilog.AspNetCore" Version="4.1.0" />
<PackageReference Include="Serilog.Sinks.MSSqlServer" Version="5.6.0" />
下面的 config 和 program.cs 文件对我有用。
确保 appsettings.json 中的 Serilog 包含此行 "Using":["Serilog.Sinks.MSSqlServer"] ,如下所示:
"Serilog": {
"Using": [ "Serilog.Sinks.MSSqlServer" ],
"MinimumLevel": "Information",
"Override": {
"Microsoft.EntityFrameworkCore.Database.Command": "Error",
"Microsoft": "Error",
"Microsoft.AspNetCore.Mvc": "Warnning"
},
"WriteTo": [
{
"Name": "MSSqlServer",
"Args": {
"connectionString": "Server=dbserverhost.domain.com;Database=DBName; Trusted_Connection=True; MultipleActiveResultSets=true",
"schemaName": "dbo",
"tableName": "AppLogs",
"autoCreateSqlTable": true
//,
//"columnOptionsSection": {
// "removeStandardColumns": [ "Properties" ]
// //,
// //"customColumns": [
// // {
// // "ColumnName": "EventType",
// // "DataType": "int",
// // "AllowNull": false
// // },
// // {
// // "ColumnName": "Release",
// // "DataType": "varchar",
// // "DataLength": 32
// // }
// //]
//}
}
,
"restrictedToMinimumLevel": "Warning"
}
]
}
我的 Program.cs 文件
using Serilog;
public class Program
{
public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(config)
//.WriteTo.File("Logs/log-.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
Log.Information("Hello {Name} from thread {ThreadId}", Environment.GetEnvironmentVariable("USERNAME"), Thread.CurrentThread.ManagedThreadId);
var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
var loggerFactory = services.GetRequiredService<ILoggerFactory>();
}
host.Run();
// CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseSerilog()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
Serilog默认创建表,更多详情请点击here https://github.com/serilog/serilog-sinks-mssqlserver#table-definition
CREATE TABLE [Logs] (
[Id] int IDENTITY(1,1) NOT NULL,
[Message] nvarchar(max) NULL,
[MessageTemplate] nvarchar(max) NULL,
[Level] nvarchar(128) NULL,
[TimeStamp] datetime NOT NULL,
[Exception] nvarchar(max) NULL,
[Properties] nvarchar(max) NULL
CONSTRAINT [PK_Logs] PRIMARY KEY CLUSTERED ([Id] ASC)
);