Реализация регистрации в базе данных SQL Server для приложений Dot Net Core.
Этот репозиторий содержит реализацию поставщика средств ведения журнала ASP.NET Core в базе данных SQL Server. Это позволяет вам регистрировать информацию в таблице базы данных SQL. Общие сведения о реализации средства ведения журнала ASP.NET Core см. здесь.
Установите пакет NuGet Daenet.Common.Logging.Sql в свое приложение.
SqlServerLogger необходимо настроить и инициализировать.
Базовое веб-приложение ASP.NET
public static IWebHost BuildWebHost ( string [ ] args ) =>
WebHost . CreateDefaultBuilder ( args )
. UseStartup < Startup > ( )
. ConfigureLogging ( ( hostingContext , logging ) =>
{
var loggerSection = hostingContext . Configuration . GetSection ( "Logging" ) ;
logging . AddConfiguration ( loggerSection ) ;
logging . AddConsole ( ) ;
logging . AddDebug ( ) ;
logging . AddSqlServerLogger ( ( sett ) =>
{
sett . SetSqlServerLoggerSettings ( loggerSection ) ;
} ) ;
} )
. Build ( ) ;
}
Консольное приложение
public IConfigurationRoot Configuration ;
var builder = new ConfigurationBuilder ( ) . AddJsonFile ( "appsettings.json" ) ;
Configuration = builder . Build ( ) ;
ILoggerFactory loggerFactory = new LoggerFactory ( ) . AddSqlServerLogger ( Configuration . GetSection ( "Logging" ) ) ;
ILogger logger = loggerFactory . CreateLogger < SqlServerLoggerTests > ( ) ;
В appsettings.json часть SqlProvider
необходимо добавить в Logging
.
{
"Logging" : {
"IncludeScopes" : true ,
"Debug" : {
"LogLevel" : {
"Default" : " Information "
}
},
"Console" : {
"LogLevel" : {
"Default" : " Warning "
}
},
"SqlProvider" : {
"LogLevel" : {
"Default" : " Information "
},
"ConnectionString" : " " ,
"TableName" : " SqlLog " ,
"BatchSize" : 1 ,
"InsertTimerInSec" : 60 ,
"IncludeExceptionStackTrace" : false ,
"IgnoreLoggingErrors" : false ,
"ScopeSeparator" : " => "
}
}
}
Конфигурация LogLevel выполняется на глобальном уровне и на уровне средства ведения журнала. См. раздел «Введение в ведение журнала в ASP.NET Core».
Флаг IncludeScope используется, когда ведение журнала должно выполняться внутри одной конкретной области. Если IncludeScope установлено значение true и инициализируется внутри кода с помощью BeginScope("scopeStatement"), добавляется идентификатор области к каждому зарегистрированному оператору, который добавляется в базу данных в столбце "Область". В следующем примере показано использование области при ведении журнала, когда для флага IncludeScopes установлено значение true.
using ( m_Logger . BeginScope ( $ "Scope Begins : { Guid . NewGuid ( ) } " ) )
{
//Here log something
}
Это добавит «Начало области действия: новое шестнадцатеричное руководство » для каждого экземпляра объекта класса, в котором начинается область действия.
ConnectionString — это строка подключения ADO.NET для аутентификации SQL.
TableName — имя таблицы, в которую регистратор должен вести журнал.
BatchSize Определяет, когда записывать сообщения в базу данных. Если BatchSize
> 1, мы заполняем список и ждем, пока счетчик списка достигнет BatchSize
или вставка в БД инициируется InsertTimerInSec
. Если BatchSize > 1, запись данных в базу данных является асинхронной.
InsertTimerInSec Время, прошедшее, когда регистратор записывает в таблицу, даже если BatchSize
не достигнут.
(УДАЛЕНО в версии 1.0.7.2) Если флаг CreateTblIfNotExist установлен в значение true, он дает возможность средству ведения журнала создавать таблицу с именем таблицы, указанным в конфигурации, если она еще не доступна в базе данных. Этот флаг полезен при тестировании регистратора в среде разработки.
Флаг IncludeExceptionStackTrace в настоящее время не реализован, и полное исключение регистрируется в таблице независимо от этого флага.
Флаг IgnoreLoggingErrors определяет, должно ли приложение выйти из строя, если при регистрации возникнет исключение. Если установлено значение false, регистратор в данный момент регистрирует эти ошибки в консоли отладки. **ВНИМАНИЕ: работает только в том случае, если BatchSize = 1.
Чтобы зарегистрировать ошибку в базе данных SQL, в базе данных должна присутствовать таблица с предопределенным форматом столбца. Следующие столбцы заполняются регистратором:
Следующий запрос создаст новую таблицу в базе данных SQL с указанными выше параметрами и должен использоваться в качестве справочного запроса для формата по умолчанию.
CREATE TABLE [dbo].[YourTableName](
[Id] [ bigint ] IDENTITY( 1 , 1 ) NOT NULL ,
[EventId] [ int ] NULL ,
[Type] [nvarchar]( 15 ) NOT NULL ,
[Scope] [nvarchar](MAX) NULL ,
[Message] [nvarchar](max) NOT NULL ,
[Exception] [nvarchar](max) NULL ,
[ TimeStamp ] [datetime] NOT NULL ,
[CategoryName] [nvarchar] (max) NULL ,
CONSTRAINT [PK_YourTableName] 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]
Также возможно записать параметры в базу данных. В этом примере мы хотим зарегистрировать RequestId и область действия в базе данных. Чтобы это работало, вам, конечно, необходимо создать столбцы.
Эту конфигурацию необходимо добавить в раздел SqlProvider
в Logging
.
Ниже приведен пример регистрации параметров внутреннего журнала 2 .NET Core. Вы можете расширить это с помощью параметров, которые вы используете в журнале. Хорошим примером является {method}
для регистрации имени метода в общем виде.
"ScopeColumnMapping" : {
"RequestId" : " RequestId " ,
"SCOPEPATH" : " Scope "
}
Также можно использовать свой собственный формат журнала, предоставив loggingFormatter.