首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Serilog到SQLite的第一个EF核

使用Serilog到SQLite的第一个EF核
EN

Stack Overflow用户
提问于 2019-11-08 18:46:58
回答 1查看 384关注 0票数 2

与应用程序相关的体系结构可以描述为:

通过使用抽象(例如,Microsoft.Extensions.Logging);

  • uses使用代码优先方法创建数据库)将日志记录与应用程序隔离开来;应用程序在从DatabaseFacade.

调用EnsureCreated之前可能会记录一些要记录的信息。

因此:

当应用程序starts;

  • Serilog首先在EF前面创建数据库时,
  • 配置Serilog是IHost创建过程的一部分;
  • EF不会创建数据库,因为它是由Serilog;

创建的。

问题:

我可以指示entire在不为整个数据库创建迁移步骤的情况下更新数据库模式吗?是否可以延迟/禁止Serilog创建数据库(例如,只允许更新现有的database)?

  • Are,还有其他实现类似结果的选项?

)

EN

回答 1

Stack Overflow用户

发布于 2022-03-24 07:35:57

配置serilog

代码语言:javascript
复制
IDictionary<string, ColumnWriterBase> columnOptions = new Dictionary<string, ColumnWriterBase>
{
   { "message",             new RenderedMessageColumnWriter(NpgsqlDbType.Text) },
   { "message_template",    new MessageTemplateColumnWriter(NpgsqlDbType.Text) },
   { "level",               new LevelColumnWriter(true, NpgsqlDbType.Varchar) },
   { "raise_date",          new TimestampColumnWriter(NpgsqlDbType.TimestampTz) },
   { "exception",           new ExceptionColumnWriter(NpgsqlDbType.Text) },
   { "properties",          new LogEventSerializedColumnWriter(NpgsqlDbType.Jsonb) },
   { "props_test",          new PropertiesColumnWriter(NpgsqlDbType.Jsonb) },
   { "machine_name",        new SinglePropertyColumnWriter("MachineName",                       PropertyWriteMethod.ToString, NpgsqlDbType.Text, "l") },
};

Log.Logger = new LoggerConfiguration()
    .Enrich.FromLogContext()
    .Destructure.UsingAttributes()
    .MinimumLevel.Debug()
    .WriteTo.PostgreSQL(
        connectionString: connectionStringHere,
        tableName: "Logs",
        columnOptions: columnOptions,
        needAutoCreateTable: false,
        schemaName: "public",
        useCopy: true,
        queueLimit: 3000,
        batchSizeLimit: 40,
        period: new TimeSpan(0, 0, 10),
        formatProvider: null)
    .CreateLogger();

然后可以创建映射这些数据库字段的C#类。

代码语言:javascript
复制
[Keyless]
[Table("Logs")]
public class ActivityLogs
{
    [Column("message")]
    public string Message { get; set; }

    [Column("message_template")]
    public string MessageTemplate { get; set; }

    [Column("level")]
    public string Level { get; set; }

    [Column("raise_date")]
    public DateTime RaiseDate { get; set; }

    [Column("exception")]
    public string Exception { get; set; }

    [Column("properties", TypeName = "jsonb")]
    public string Properties { get; set; }

    [Column("props_test", TypeName = "jsonb")]
    public string PropsTest { get; set; }
}

如果希望添加更多列,那么还需要修改C#模型类和columnOptions。

PS:在这里,我尝试解释如何使用代码优先方法为serilog创建一个数据库。如果你还有别的问题,请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58772215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档