Как добавить пользовательский столбец в мой приемник Serilog MS SQL Server? - PullRequest
1 голос
/ 25 апреля 2019

Я пытаюсь добавить пользовательский столбец в мою базу данных журналов, однако я получаю исключение TargetInvocationException.

Это работало до того, как я добавил MSSqlServerSettingsSection (то есть без пользовательского столбца), поэтому я, вероятно, что-то там упускаю.

Однако, глядя на пример на https://github.com/serilog/serilog-sinks-mssqlserver Я не могу понять, что мне нужно.

Настройки приемника MSSqlServer:

<MSSqlServerSettingsSection>
    <Columns>
      <add ColumnName="JobId" 
           DataType="nvarchar"
           DataLength="256"
           AllowNull="True"/>
    </Columns>
</MSSqlServerSettingsSection>

приложение.config:

<configuration>
  <configSections>
    <section name="MSSqlServerSettingsSection" type="Serilog.Configuration.MSSqlServerConfigurationSection, Serilog.Sinks.MSSqlServer"/>
  </configSections>
  <MSSqlServerSettingsSection configSource="Configs\Shared.Serilog.MSSqlServerSettings.config" />
  <appSettings>
    <add key="serilog:using:MSSqlServer" value="Serilog.Sinks.MSSqlServer" />
    <add key="serilog:write-to:MSSqlServer.connectionString" value="Server=127.0.0.1; Database=LogDB; User Id=Serilog; Password=Password123;" />
    <add key="serilog:write-to:MSSqlServer.tableName" value="Logs" />
    <add key="serilog:write-to:MSSqlServer.autoCreateSqlTable" value="false" />
    <add key="serilog:write-to:MSSqlServer.restrictedToMinimumLevel" value="Verbose" />
  </appSettings>
</configuration>

Запрос на создание:

CREATE TABLE [dbo].[Logs]
(
    [Id] int IDENTITY(1,1) NOT NULL,
    [Message] nvarchar(max) NULL,
    [MessageTemplate] nvarchar(max) NULL,
    [Level] nvarchar(128) NULL,
    [TimeStamp] datetime NOT NULL,
    [Exception] nvarchar(max) NULL,
    [Properties] nvarchar(max) NULL,
    [JobId] nvarchar(256) NULL 

    CONSTRAINT [PK_Logs] PRIMARY KEY CLUSTERED ([Id] ASC), 
)

DI с использованием единицы:

container.RegisterInstance<ILogger>(new LoggerConfiguration()
                                                .Enrich
                                                .FromLogContext()
                                                .ReadFrom
                                                .AppSettings()
                                                .CreateLogger());
Log.Logger = container.Resolve<ILogger>();

Я попытался отладить с помощью Selflog, но файл журнала пуст:

var file = File.CreateText("Self.log");
Serilog.Debugging.SelfLog.Enable(TextWriter.Synchronized(file));

1 Ответ

1 голос
/ 26 апреля 2019

Я получаю следующее исключение

System.Configuration.ConfigurationErrorsException: 'Unrecognized attribute 
'DataLength'. Note that attribute names are case-sensitive.'

Не уверен, почему это так, согласно документации это должно быть правильно. Удаление этой строки дало мне ту же проблему с «AllowNull».

Удаление обеих строк, похоже, работает.

...