تنفيذ التسجيل في قاعدة بيانات SQL Server لتطبيقات Dot Net Core.
يحتوي هذا المستودع على تطبيق ASP.NET Core Logger Provider في قاعدة بيانات SQL Server. أنها تمكنك من تسجيل المعلومات في جدول قاعدة بيانات SQL. للاطلاع على التنفيذ العام لمسجل ASP.NET Core، تفضل بزيارة هنا.
قم بتثبيت حزمة Daenet.Common.Logging.Sql NuGet في تطبيقك.
يحتاج 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") معرف النطاق إلى كل عبارة مسجلة تتم إضافتها إلى قاعدة البيانات ضمن العمود "Scope". يوضح المثال التالي استخدام النطاق في التسجيل عند تعيين علامة IncludeScopes على القيمة true.
using ( m_Logger . BeginScope ( $ "Scope Begins : { Guid . NewGuid ( ) } " ) )
{
//Here log something
}
سيؤدي هذا إلى إضافة "يبدأ النطاق: دليل سداسي عشري جديد " لكل مثيل كائن للفئة التي يبدأ فيها النطاق.
ConnectionString هي سلسلة اتصال ADO.NET لمصادقة SQL.
TableName هو اسم الجدول الذي يجب أن يقوم المسجل بتسجيل الدخول إليه.
BatchSize يقرر متى يتم كتابة الرسائل إلى قاعدة البيانات. إذا كان BatchSize
> 1، فإننا نملأ القائمة وننتظر حتى يصل عدد القائمة إلى BatchSize
أو يتم تشغيل Insert to DB بواسطة InsertTimerInSec
. إذا كان BatchSize > 1، فإن كتابة البيانات إلى قاعدة البيانات غير متزامنة.
انقضى وقت InsertTimerInSec عندما يكتب المُسجل إلى الجدول حتى لو لم يتم الوصول إلى BatchSize
.
(تمت الإزالة في 1.0.7.2) تمنح علامة CreateTblIfNotExist عند تعيينها على true للمسجل القدرة على إنشاء جدول اسم الجدول الذي تم توفيره في التكوين في حالة عدم توفره بالفعل في قاعدة البيانات. هذه العلامة مفيدة أثناء اختبار المسجل في بيئة التطوير.
لم يتم تنفيذ علامة IncludeExceptionStackTrace حاليًا وتم تسجيل الاستثناء الكامل في الجدول بغض النظر عن هذه العلامة.
علامة IgnoreLoggingErrors هي تحديد ما إذا كان التطبيق يجب أن يفشل في حالة حدوث استثناء عند التسجيل. عند التعيين على خطأ، يقوم المُسجل حاليًا بتسجيل هذه الأخطاء في وحدة تحكم التصحيح. ** تحذير: يعمل فقط إذا كان 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]
من الممكن تسجيل المعلمات في قاعدة البيانات أيضًا. في هذا المثال، نريد تسجيل معرف الطلب والنطاق في قاعدة البيانات. لكي ينجح هذا، عليك إنشاء الأعمدة بالطبع.
يجب إلحاق هذا التكوين بقسم SqlProvider
في Logging
.
فيما يلي مثال لكيفية تسجيل معلمات التسجيل الداخلي لـ .NET Core. يمكنك توسيع هذا باستخدام المعلمات التي تستخدمها في التسجيل الخاص بك. من الأمثلة الجيدة هنا {method}
لتسجيل اسم الطريقة بطريقة عامة.
"ScopeColumnMapping" : {
"RequestId" : " RequestId " ,
"SCOPEPATH" : " Scope "
}
من الممكن أيضًا استخدام تنسيق التسجيل المخصص الخاص بك عن طريق توفير loggingFormatter