Мое приложение работает в среде веб-сервера с балансировкой нагрузки.Кроме того, в более низких средах база данных SQL для ведения журналов является общей для нескольких сред.Я хотел бы записать имя сервера и имя среды в виде двух отдельных столбцов в дополнение к столбцам по умолчанию.Как настроить приемник SQL-сервера в файле startup.cs?
Эти столбцы не являются частью стандартных столбцов , поддерживаемых приемником.
Ниже приведена текущая схема с двумя дополнительными столбцами ...
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Logs]') AND type in (N'U'))
BEGIN
DROP TABLE [dbo].[Logs]
END
CREATE TABLE [dbo].[Logs](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Environment] [nvarchar](60) NULL,
[ServerName] [nvarchar](60) NULL,
[Message] [nvarchar](max) NULL,
[MessageTemplate] [nvarchar](max) NULL,
[Level] [nvarchar](128) NULL,
[TimeStamp] [datetimeoffset](7) NOT NULL,
[Exception] [nvarchar](max) NULL,
[Properties] [xml] NULL,
[LogEvent] [nvarchar](max) NULL,
CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
Из документации выглядит, что мне нужно настроить столбец следующим образом ... (По какой-то причине их документация не соответствует версии Serilog.Sinks.MSSqlServer версии 5.1.2)
Вот что мне нужно использовать
var sqlLogTableColumnOptions = new ColumnOptions
{
AdditionalDataColumns = new Collection<DataColumn>
{
new DataColumn{ ColumnName = "Environment", DataType = typeof(string), MaxLength= 60},
new DataColumn{ ColumnName = "ServerName", DataType = typeof(string), MaxLength = 60}
}
};
В log4net я использовал его следующим образом:
private string serverName = System.Net.Dns.GetHostName();
...
log4net.ThreadContext.Properties["Server"] = serverName;