如何配置 App.config 以删除 Serilog.Sinks.MSSqlServer 标准列?
How to configure App.config to remove Serilog.Sinks.MSSqlServer standard columns?
我使用 Serilog 进行日志记录。我需要配置 App.config
以从 Logs
table 中删除 2 个标准列(StandardColumn.Properties
和 StandardColumn.MessageTemplate
)。我在 Serilog 文档和其他资源中搜索过它,但找不到如何操作。这是我到目前为止得到的:
<configuration>
<appSettings>
<add key="serilog:using:MSSqlServer" value="Serilog.Sinks.MSSqlServer" />
<add key="serilog:write-to:MSSqlServer.connectionString" value="Data Source=SomeServer;initial catalog=DB; integrated security=True" />
<add key="serilog:write-to:MSSqlServer.tableName" value="Logs" />
<add key="serilog:minimum-level" value="Debug" />
</appSettings>
</configuration>
我想我必须添加这一行:
<add key="serilog:write-to:MSSqlServer.columnOptions" value="someColOptions" />
但是我应该如何定义someColOptions
?例如,我使用这种代码删除了列:
var colOptions = new Serilog.Sinks.MSSqlServer.ColumnOptions();
colOptions.Store.Remove(StandardColumn.Properties);
colOptions.Store.Remove(StandardColumn.MessageTemplate);
Log.Logger = new LoggerConfiguration()
.WriteTo
.MSSqlServer(
connectionString: conn_string,
sinkOptions: new MSSqlServerSinkOptions { TableName = "Logs" },
columnOptions: colOptions)
.MinimumLevel.Debug()
.CreateLogger();
现在我想在 App.config
中做同样的事情
我有一个类似的问题,我已经能够通过添加以下内容发现 configSections 必须是之后的第一部分
这将:
- 在指定的数据库中创建日志table(来自连接字符串)
- 使用 Serilog 数据库帐户(来自连接字符串)
- 从日志中删除名为属性的列table
- 添加一个名为 RunId 的新列,声明为 int
<configuration>
<configSections>
<section name="MSSqlServerSettingsSection" type="Serilog.Configuration.MSSqlServerConfigurationSection, Serilog.Sinks.MSSqlServer"/>
</configSections>
<MSSqlServerSettingsSection DisableTriggers="false" ClusteredColumnstoreIndex="false" PrimaryKeyColumnName="Id">
<!-- SinkOptions parameters -->
<TableName Value="Logs"/>
<BatchPeriod Value="00:00:15"/>
<RemoveStandardColumns>
<remove Name="Properties"/>
</RemoveStandardColumns>
<Columns>
<add ColumnName="RunId" DataType="int"/>
</Columns>
</MSSqlServerSettingsSection>
<appSettings>
<!-- Serilog Settings -->
<add key="serilog:minimum-level" value="Verbose" />
<add key="serilog:using:Console" value="Serilog.Sinks.Console"/>
<add key="serilog:write-to:Console"/>
<add key="serilog:using:File" value="Serilog.Sinks.File" />
<add key="serilog:write-to:File"/>
<add key="serilog:write-to:File.path" value="{PATH}" />
<add key="serilog:write-to:File.rollingInterval" value="Day"/>
<add key="serilog:using:MSSqlServer" value="Serilog.Sinks.MSSqlServer" />
<add key="serilog:write-to:MSSqlServer.connectionString" value="Server=[SERVER];Database=[DATABASE];User Id=Serilog;Password=[PASSWORD];"/>
<add key="serilog:write-to:MSSqlServer.tableName" value="Logs"/>
<add key="serilog:write-to:MSSqlServer.autoCreateSqlTable" value="true"/>
</appSettings>
</configuration>
调用日志。("{RunId}{Message}", _runId, _messageToShow) 导致我的文件、控制台和 MSSqlServer 接收器执行写入这些,如果它不存在,日志 table 将被创建,删除 Properties 列并添加 RunId 列。 (如果 table 存在,它除了写入数据之外什么都不做,仍在尝试找出如何处理它)。
我还在研究这个(我接下来的事情是弄清楚如何写{RunId}但不让它出现在日志中,只写入相应的数据库字段)。
HTH,
菲尔
我使用 Serilog 进行日志记录。我需要配置 App.config
以从 Logs
table 中删除 2 个标准列(StandardColumn.Properties
和 StandardColumn.MessageTemplate
)。我在 Serilog 文档和其他资源中搜索过它,但找不到如何操作。这是我到目前为止得到的:
<configuration>
<appSettings>
<add key="serilog:using:MSSqlServer" value="Serilog.Sinks.MSSqlServer" />
<add key="serilog:write-to:MSSqlServer.connectionString" value="Data Source=SomeServer;initial catalog=DB; integrated security=True" />
<add key="serilog:write-to:MSSqlServer.tableName" value="Logs" />
<add key="serilog:minimum-level" value="Debug" />
</appSettings>
</configuration>
我想我必须添加这一行:
<add key="serilog:write-to:MSSqlServer.columnOptions" value="someColOptions" />
但是我应该如何定义someColOptions
?例如,我使用这种代码删除了列:
var colOptions = new Serilog.Sinks.MSSqlServer.ColumnOptions();
colOptions.Store.Remove(StandardColumn.Properties);
colOptions.Store.Remove(StandardColumn.MessageTemplate);
Log.Logger = new LoggerConfiguration()
.WriteTo
.MSSqlServer(
connectionString: conn_string,
sinkOptions: new MSSqlServerSinkOptions { TableName = "Logs" },
columnOptions: colOptions)
.MinimumLevel.Debug()
.CreateLogger();
现在我想在 App.config
我有一个类似的问题,我已经能够通过添加以下内容发现 configSections 必须是之后的第一部分 这将:
- 在指定的数据库中创建日志table(来自连接字符串)
- 使用 Serilog 数据库帐户(来自连接字符串)
- 从日志中删除名为属性的列table
- 添加一个名为 RunId 的新列,声明为 int
<configuration>
<configSections>
<section name="MSSqlServerSettingsSection" type="Serilog.Configuration.MSSqlServerConfigurationSection, Serilog.Sinks.MSSqlServer"/>
</configSections>
<MSSqlServerSettingsSection DisableTriggers="false" ClusteredColumnstoreIndex="false" PrimaryKeyColumnName="Id">
<!-- SinkOptions parameters -->
<TableName Value="Logs"/>
<BatchPeriod Value="00:00:15"/>
<RemoveStandardColumns>
<remove Name="Properties"/>
</RemoveStandardColumns>
<Columns>
<add ColumnName="RunId" DataType="int"/>
</Columns>
</MSSqlServerSettingsSection>
<appSettings>
<!-- Serilog Settings -->
<add key="serilog:minimum-level" value="Verbose" />
<add key="serilog:using:Console" value="Serilog.Sinks.Console"/>
<add key="serilog:write-to:Console"/>
<add key="serilog:using:File" value="Serilog.Sinks.File" />
<add key="serilog:write-to:File"/>
<add key="serilog:write-to:File.path" value="{PATH}" />
<add key="serilog:write-to:File.rollingInterval" value="Day"/>
<add key="serilog:using:MSSqlServer" value="Serilog.Sinks.MSSqlServer" />
<add key="serilog:write-to:MSSqlServer.connectionString" value="Server=[SERVER];Database=[DATABASE];User Id=Serilog;Password=[PASSWORD];"/>
<add key="serilog:write-to:MSSqlServer.tableName" value="Logs"/>
<add key="serilog:write-to:MSSqlServer.autoCreateSqlTable" value="true"/>
</appSettings>
</configuration>
调用日志。("{RunId}{Message}", _runId, _messageToShow) 导致我的文件、控制台和 MSSqlServer 接收器执行写入这些,如果它不存在,日志 table 将被创建,删除 Properties 列并添加 RunId 列。 (如果 table 存在,它除了写入数据之外什么都不做,仍在尝试找出如何处理它)。
我还在研究这个(我接下来的事情是弄清楚如何写{RunId}但不让它出现在日志中,只写入相应的数据库字段)。
HTH,
菲尔