Serilog简介

Serilog是.net中的诊断日志库,可以在所有的.net平台上面运行。Serilog支持结构化日志记录,对复杂、分布式、异步应用程序的支持非常出色。Serilog可以通过插件的方式把日志写入到各种终端,控制台、文本、Sqlserver、ElasticSearch,Serilog支持终端的列表:https://github.com/serilog/serilog/wiki/Provided-Sinks 。

Serilog日志写入SqlServer

一、Sink LoggerConfiguration

  • connectionString  数据库连接字符串
  • schemaName  数据库所有者,默认dbo
  • tableName  记录日志的表名 
  • autoCreateSqlTable  是否自动创建表,如果设置为ture,则在Serilog启动时检测数据库是否有对应的表,没有则创建 
  • columnOptions  日志表中的列定义
  • restrictedToMinimumLevel  记录日志的最小level 
  • batchPostingLimit  单次批量处理中提交的最大日志数量
  • period  进行批量提交的间隔
  • formatProvider 提供特定的格式化处理,https://github.com/serilog/serilog/wiki/Formatting-Output#format-providers

Serilog为我们定义了一套标准列,默认情况下会生成如下列,当然我们也可以自定义列

  • StandardColumn.Id  自增Id 
  • StandardColumn.Message  日志内容 
  • StandardColumn.MessageTemplate 日志模板
  • StandardColumn.Level  等级 
  • StandardColumn.TimeStamp  记录时间
  • StandardColumn.Exception  异常信息
  • StandardColumn.Properties 日志事件属性值

删除标准列:

columnOptions.Store.Remove(StandardColumn.MessageTemplate);

添加自定义列:

复制代码
columnOptions.AdditionalColumns = new Collection<SqlColumn>                 {                     new SqlColumn { DataType = SqlDbType.NVarChar, DataLength = 32, ColumnName = "IP" }                  };
复制代码

完整LoggerConfiguration示例如下:

复制代码
var columnOptions = new ColumnOptions();             columnOptions.Store.Remove(StandardColumn.MessageTemplate);//删除标准列            columnOptions.Properties.ExcludeAdditionalProperties = true;//排除已经自定义列的数据            columnOptions.AdditionalColumns = new Collection<SqlColumn>//添加自定义列                {                     new SqlColumn { DataType = SqlDbType.NVarChar, DataLength = 32, ColumnName = "IP" }                 };              Log.Logger = new LoggerConfiguration()                 .WriteTo.MSSqlServer(                    connectionString: Configuration["Serilog:ConnectionString"],                    tableName: Configuration["Serilog:TableName"],                    batchPostingLimit: Configuration.GetValue<int>("Serilog:BatchPostingLimit"),//批量插入数据库条数                   period: TimeSpan.FromSeconds(5),//执行时间间隔                   restrictedToMinimumLevel: Configuration.GetValue<LogEventLevel>("Serilog:MinimumLevel"),                    columnOptions: columnOptions,                    autoCreateSqlTable: true                ).CreateLogger();
复制代码

上面的配置也可以全部从配置文件读取:

复制代码
<