我的应用程序使用 Entity Framework Core、SQLite 和 Serilog 来记录到名为 Database.db 的 SQLite 数据库。当 Database.db 达到 10 MB 时,Serilog 将创建一个新数据库并重命名以前的 Database-someDate.db。我无法从 Database-someDate.db 读取,只能从 Database.db 读取。
如何读取这些文件或强制其仅使用一个文件?
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var connectionString = ConfigurationManager.ConnectionStrings["SqliteConnectionString"].ConnectionString;
optionsBuilder.UseSqlite(connectionString);
}
<connectionStrings>
<clear/>
<add name ="SqliteConnectionString"
providerName="System.Data.Sqlite"
connectionString="Data Source= ./Database.Db"/>
</connectionStrings>
NuGet 包:
Serilog 配置:
<appSettings>
<!--serialog-->
<add key="general:serilog:minimum-level" value="Verbose"/>
<!--serilog sqlite-->
<add key="sqlite:serilog:using:SQLite" value="Serilog.Sinks.SQLite"/>
<add key="sqlite:serilog:write-to:SQLite.sqliteDbPath" value="Database.db"/>
<add key="sqlite:serilog:write-to:SQLite.tableName" value="Logs"/>
<add key="sqlite:serilog:write-to:SQLite.storeTimestampInUtc" value="false"/>
<add key="sqlite:serilog:write-to:SQLite.autoCreateSqlTable" value="true"/>
</appSettings>
不要将相同的 SQLite 文件同时用于 Serilog 日志记录和应用程序数据。这既不是 SQLite 问题,也不是 EF Core 问题。日志数据库由 Serilog 接收器配置和控制。
如果使用Serilog.Sinks.SQLite接收器,日志数据库在达到默认最大大小时将被分割。旧文件也将根据保留阈值被删除。 如源代码所示默认最大日志大小为 10 MB。
您也不需要使用.NET Framework 配置文件。 Serilog 已经可以与 .NET Core 配置中间件配合使用。您可以使用
Serilog.AspNetCore
或 Serilog.Extensions.Hosting
并使用 .ReadFrom.Configuration(context.Configuration)
加载设置。
在Serilog 服务示例中,Serilog 与主机一起配置:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices(services => services.AddHostedService<PrintTimeService>())
.UseSerilog((context, services, loggerConfiguration) => loggerConfiguration
.ReadFrom.Configuration(context.Configuration)
.Enrich.FromLogContext()
.WriteTo.Console());
这些设置是从应用程序其余部分使用的相同配置加载的。样本的
appsettings.json
包含
{
"Serilog": {
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Information",
"System": "Warning"
}
}
}
}
在存储库中找到 我决定增加数据库的大小,重点关注我的应用程序的大小
在应用程序设置中:
<!--serilog sqlite-->
<add key="sqlite:serilog:using:SQLite" value="Serilog.Sinks.SQLite"/>
<add key="sqlite:serilog:write-to:SQLite.sqliteDbPath" value="Database.db"/>
<add key="sqlite:serilog:write-to:SQLite.tableName" value="Logs"/>
<add key="sqlite:serilog:write-to:SQLite.storeTimestampInUtc" value="false"/>
<add key="sqlite:serilog:write-to:SQLite.autoCreateSqlTable" value="true"/>
<!--parameter responsible for the size of the database file (MB), maximum-10GB -->
<add key="sqlite:serilog:write-to:SQLite.maxDatabaseSize" value="2048"/>
<!--parameter responsible for the creating a new file-->
<add key="sqlite:serilog:write-to:SQLite.rollOver" value="true"/>