将Serilog连接到MSSQL数据库的细节和基础是什么?

时间:2019-03-19 16:29:06

标签: c# serilog

将Serilog连接到MSSQL数据库的细节和基础是什么?这是我到目前为止所拥有的。你能告诉我我要去哪里了吗?

在app.config中,我有:

    <?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
  <connectionStrings>
    <add name="LogConnectionString" connectionString="Data Source=data.dev.db.com,14330;Integrated Security=SSPI;Database=DNA_Logs;"
      providerName="System.Data.SqlClient"/>
  </connectionStrings>
</configuration>

在C#代码中,我有:

public Guid transactionGuid = Guid.NewGuid();

public string transactionGUIDString = string.Empty;

public StringWriter TraceLog = new StringWriter();

public void HelloLog()
{
    this.transactionGUIDString = transactionGuid.ToString("B").ToUpper();

    var logger = new LoggerConfiguration()
        .MinimumLevel.Debug()
        .Enrich.WithProperty("TransactionId", this.transactionGuid)
        .WriteTo.MSSqlServer("LogConnectionString", "Serilog_Logs")
        .WriteTo.TextWriter(TraceLog)
        .CreateLogger();

    // Output logs
    logger.Information("Hello, Serilog!");
}

数据库表的配置如下:

enter image description here

所以我有几个问题。首先,由于数据库表在技术上被命名为“ dbo.Serilog_Logs”,C#代码不应该使用该表名而不是仅使用“ Serilog_Logs”吗?

我找到了Serilog的一些示例代码,但它仅写入控制台。我想修改此示例代码以写入MSSQL Server。我想知道应该如何配置表的列。

2 个答案:

答案 0 :(得分:0)

有关如何创建表结构以及如何配置接收器的文档,都在存储库的自述文件中进行了描述

https://github.com/serilog/serilog-sinks-mssqlserver/


  

Serilog.Sinks.MSSqlServer

     

将事件写入Microsoft SQL Server的Serilog接收器。该接收器会将日志事件数据写入表中,并且>可以选择将属性存储在XML或JSON列中,以便可以查询它们。重要属性也可以>写入其自己的单独列中。

     

包装-Serilog.Sinks.MSSqlServer   | 最小平台-.NET Framework 4.5.2,.NET Core 2.0,.NET Standard 2.0

     话题      

答案 1 :(得分:0)

dbo.Serilog_Logs默认模式名称为dbo(如果未指定),可以使用下面的SQL语句创建自己的模式,并使用schemaName: "LOG"在配置方法参数中进行提及

CREATE SCHEMA LOG;

还请确保该数据库存在,并且可以访问该数据库并抛出连接字符串,但该数据库不存在,请使用以下SQL命令创建新数据库

CREATE DATABASE Serilog_DB;

要配置表列,您可以使用columnOptions并使用ColumnOptions定义列,如下例所示

var connectionString = ConfigurationManager.ConnectionStrings["LogConnectionString"].ToString();
var tableName = "Serilog_Logs";
var customColumnOptions = new ColumnOptions();
customColumnOptions.Store.Remove(StandardColumn.Properties); // Remove Column
customColumnOptions.Store.Add(StandardColumn.LogEvent); // Add new column to default columns

var logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .Enrich.WithProperty("TransactionId", transactionGuid)
    .WriteTo.MSSqlServer(connectionString: connectionString
        , tableName: tableName
        , schemaName: "LOG" // Schema should be create in database first
        , columnOptions: customColumnOptions
        , autoCreateSqlTable: true) // Will create the table if a table by that name doesn't exist
    .WriteTo.Console()
    .CreateLogger();

结果应如下图所示

Serilog Table and Columns