如何从多个数据库文件中读取数据?

问题描述 投票:0回答:2

我的应用程序使用 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>
c# .net sqlite entity-framework-core system.data.sqlite
2个回答
0
投票

不要将相同的 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"
      }
    }
  }
}

0
投票

存储库中找到 我决定增加数据库的大小,重点关注我的应用程序的大小

在应用程序设置中:

    <!--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"/>
© www.soinside.com 2019 - 2024. All rights reserved.