serilog-sinks-mssqlserver:排除 xml 配置文件中的列
serilog-sinks-mssqlserver: Exclude column in xml Config file
如何排除 xml 配置文件中的列?
我想这样做serilogColumnOptions.Store.Remove(StandardColumn.Properties);配置文件中的事件
似乎无法通过 XML 配置删除 Serilog 列。
您还可以通过检查 source code 的 SQL 服务器接收器来验证这一点:
MSSqlServer()
扩展方法检查 MSSqlServerSettingsSection
部分以配置列,如 documentation.
中所述
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
集合中删除列。
如果您的应用程序必须具有 Serilog 的文件配置并且有可能删除某些列,您可以从文件中添加对 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>
希望对您有所帮助。
如何排除 xml 配置文件中的列?
我想这样做serilogColumnOptions.Store.Remove(StandardColumn.Properties);配置文件中的事件
似乎无法通过 XML 配置删除 Serilog 列。
您还可以通过检查 source code 的 SQL 服务器接收器来验证这一点:
MSSqlServer()
扩展方法检查 MSSqlServerSettingsSection
部分以配置列,如 documentation.
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
集合中删除列。
如果您的应用程序必须具有 Serilog 的文件配置并且有可能删除某些列,您可以从文件中添加对 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>
希望对您有所帮助。