与应用程序相关的体系结构可以描述为:
通过使用抽象(例如,Microsoft.Extensions.Logging);
调用EnsureCreated之前可能会记录一些要记录的信息。
因此:
当应用程序starts;
创建的。
问题:
我可以指示entire在不为整个数据库创建迁移步骤的情况下更新数据库模式吗?是否可以延迟/禁止Serilog创建数据库(例如,只允许更新现有的database)?
)
发布于 2022-03-24 07:35:57
配置serilog
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#类。
[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创建一个数据库。如果你还有别的问题,请告诉我。
https://stackoverflow.com/questions/58772215
复制相似问题