Implementasi Logging di Database SQL Server untuk Aplikasi Dot Net Core.
Repositori ini berisi Implementasi Penyedia Logger Inti ASP.NET di Database SQL Server. Ini memungkinkan Anda untuk mencatat informasi dalam tabel Database SQL. Untuk implementasi logger ASP.NET Core secara umum, kunjungi di sini.
Instal Paket NuGet Daenet.Common.Logging.Sql di aplikasi Anda.
SqlServerLogger perlu dikonfigurasi dan diinisialisasi.
Aplikasi Web Inti 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 ( ) ;
}
Aplikasi Konsol
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 > ( ) ;
Di appsettings.json , bagian SqlProvider
perlu ditambahkan ke 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" : " => "
}
}
}
Konfigurasi LogLevel dilakukan pada tingkat global dan logger, lihat Pengenalan Logging di ASP.NET Core
Bendera IncludeScope digunakan ketika pencatatan dilakukan dalam satu lingkup tertentu. IncludeScope ketika disetel ke true, dan diinisialisasi di dalam kode dengan BeginScope("scopeStatement") menambahkan id cakupan ke setiap pernyataan yang dicatat yang ditambahkan ke database di bawah kolom "Scope". Contoh berikut mengilustrasikan penggunaan cakupan dalam pembuatan log ketika tanda IncludeScopes disetel ke true.
using ( m_Logger . BeginScope ( $ "Scope Begins : { Guid . NewGuid ( ) } " ) )
{
//Here log something
}
Ini akan menambahkan "Cakupan dimulai: panduan heksadesimal baru " untuk setiap instance objek dari kelas tempat cakupan dimulai.
ConnectionString adalah string koneksi ADO.NET untuk otentikasi SQL.
TableName adalah nama tabel dimana logger harus login.
BatchSize Memutuskan kapan menulis pesan ke database. Jika BatchSize
> 1 maka kita mengisi Daftar dan menunggu hingga jumlah daftar mencapai BatchSize
atau Sisipkan ke DB dipicu oleh InsertTimerInSec
. Jika BatchSize > 1 menulis data ke db tidak sinkron.
InsertTimerInSec Waktu berlalu ketika logger menulis ke tabel bahkan BatchSize
tidak tercapai.
(DIHAPUS di 1.0.7.2) Bendera CreateTblIfNotExist bila disetel ke true, memberikan kemampuan logger untuk membuat tabel nama tabel yang disediakan dalam konfigurasi jika belum tersedia di database. Tanda ini berguna saat menguji logger di lingkungan pengembangan.
Bendera IncludeExceptionStackTrace saat ini tidak diterapkan dan pengecualian lengkap dicatat dalam tabel terlepas dari bendera ini.
Tanda IgnoreLoggingErrors adalah untuk memutuskan apakah aplikasi harus gagal jika terjadi pengecualian saat logging. Jika disetel ke false, logger saat ini mencatat kesalahan ini di konsol debug. **PERINGATAN: Hanya berfungsi jika BatchSize = 1
Untuk mencatat kesalahan dalam database SQL, Sebuah tabel harus ada dalam database dengan format kolom yang telah ditentukan sebelumnya. Kolom berikut diisi oleh logger -
Kueri berikut akan membuat tabel baru di SQL Database dengan parameter di atas, dan harus digunakan sebagai kueri referensi untuk format default.
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]
Dimungkinkan juga untuk mencatat parameter ke database. Dalam contoh ini kami ingin mencatat RequestId dan cakupannya ke database. Agar ini berfungsi, tentu saja Anda harus membuat kolom.
Konfigurasi ini harus ditambahkan ke bagian SqlProvider
di Logging
.
Berikut adalah contoh cara mencatat 2 parameter logging internal .NET Core. Anda dapat memperluas ini, dengan parameter yang Anda gunakan dalam logging Anda. Contoh yang bagus di sini adalah {method}
untuk mencatat nama metode secara umum.
"ScopeColumnMapping" : {
"RequestId" : " RequestId " ,
"SCOPEPATH" : " Scope "
}
Dimungkinkan juga untuk menggunakan format logging kustom Anda sendiri dengan menyediakan loggingFormatter