簡體   English   中英

serilog-sinks-mssqlserver:排除xml配置文件中的列

[英]serilog-sinks-mssqlserver: Exclude column in xml Config file

如何排除xml配置文件中的列?

我想這樣做serilogColumnOptions.Store.Remove(StandardColumn.Properties); 配置文件中的事件

似乎無法通過XML配置刪除Serilog列。

我發現了這一說法的一些確認: 這里這里

您還可以通過檢查SQL Server Sink的源代碼來驗證這一點:

MSSqlServer()擴展方法檢查“ MSSqlServerSettingsSection部分是否配置了文檔中所述的列。

MSSqlServerConfigurationSection serviceConfigSection =
    ConfigurationManager.GetSection("MSSqlServerSettingsSection") as MSSqlServerConfigurationSection;

// If we have additional columns from config, load them as well
if (serviceConfigSection != null && serviceConfigSection.Columns.Count > 0)
{
    if (columnOptions == null)
    {
        columnOptions = new ColumnOptions();
    }
    GenerateDataColumnsFromConfig(serviceConfigSection, columnOptions);
}

然后,如果您檢查GenerateDataColumnsFromConfig()方法,您會看到所有已配置的列都剛剛添加到ColumnOptions AdditionalDataColumns集合中。 但是,沒有任何代碼可用於從Store集合中刪除列。

如果您的應用程序必須具有Seri​​log的文件配置,並且有可能刪除一些列,則可以從文件中添加Serilog配置的簡單替換。 這是這種配置的示例實現:

var connectionString = ConfigurationManager.AppSettings["serilog:write-to:MSSqlServer.connectionString"];
var tableName = ConfigurationManager.AppSettings["serilog:write-to:MSSqlServer.tableName"];
var autoCreateSqlTable = Convert.ToBoolean(ConfigurationManager.AppSettings["serilog:write-to:MSSqlServer.autoCreateSqlTable"]);
var excludedColumns = ConfigurationManager.AppSettings["serilog:write-to:MSSqlServer.excludedColumns"];

ColumnOptions columnOptions = new ColumnOptions();
foreach (var excludedColumn in Regex.Split(excludedColumns, ",\\s*"))
{
    columnOptions.Store.Remove((StandardColumn)Enum.Parse(typeof(StandardColumn), excludedColumn, true));
}

Logger log = new LoggerConfiguration()
    .WriteTo.MSSqlServer(connectionString, tableName, columnOptions: columnOptions, autoCreateSqlTable: autoCreateSqlTable)
    .CreateLogger();

這是appSettings部分:

  <appSettings>
    <add key="serilog:using:MSSqlSever" value="Serilog.Sinks.MSSqlServer" />
    <add key="serilog:write-to:MSSqlServer.connectionString" value="Server=.;Database=LoggingDB;Trusted_Connection=True;"/>
    <add key="serilog:write-to:MSSqlServer.tableName" value="Logs"/>
    <add key="serilog:write-to:MSSqlServer.autoCreateSqlTable" value="true"/>
    <add key="serilog:write-to:MSSqlServer.excludedColumns" value="Properties, TimeStamp"/>
  </appSettings>

希望這會幫助你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM