การใช้งานการบันทึกในฐานข้อมูลเซิร์ฟเวอร์ SQL สำหรับแอปพลิเคชัน Dot Net Core
พื้นที่เก็บข้อมูลนี้มีการใช้งานผู้ให้บริการ ASP.NET Core Logger ในฐานข้อมูลเซิร์ฟเวอร์ SQL ช่วยให้คุณสามารถบันทึกข้อมูลในตารางฐานข้อมูล SQL สำหรับการใช้งาน ASP.NET Core logger ทั่วไป โปรดไปที่นี่
ติดตั้ง แพ็คเกจ 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 ถูกใช้เมื่อต้องทำการบันทึกภายในขอบเขตหนึ่งโดยเฉพาะ รวมขอบเขตเมื่อตั้งค่าเป็นจริง และเริ่มต้นโค้ดภายในด้วย beginningScope("scopeStatement") จะเพิ่มรหัสขอบเขตให้กับทุกคำสั่งที่บันทึกไว้ซึ่งจะถูกเพิ่มลงในฐานข้อมูลภายใต้คอลัมน์ "ขอบเขต" ตัวอย่างต่อไปนี้แสดงให้เห็นการใช้ขอบเขตในการบันทึกเมื่อตั้งค่าสถานะ รวมขอบเขต เป็นจริง
using ( m_Logger . BeginScope ( $ "Scope Begins : { Guid . NewGuid ( ) } " ) )
{
//Here log something
}
สิ่งนี้จะเพิ่ม "ขอบเขตเริ่มต้น : guid เลขฐานสิบหกใหม่ " สำหรับทุกอินสแตนซ์อ็อบเจ็กต์ของคลาสที่เริ่มขอบเขต
ConnectionString คือสตริงการเชื่อมต่อ ADO.NET สำหรับการรับรองความถูกต้องของ SQL
TableName คือชื่อของตารางที่ตัวบันทึกควรบันทึก
BatchSize ตัดสินใจว่าเมื่อใดจะเขียนข้อความไปยังฐานข้อมูล หาก BatchSize
> 1 เราจะกรอก List และรอจนกระทั่งจำนวนรายการถึง BatchSize
หรือ Insert to DB จะถูกทริกเกอร์โดย InsertTimerInSec
หาก BatchSize > 1 การเขียนข้อมูลไปยัง db เป็นแบบอะซิงโครนัส
InsertTimerInSec เวลาที่ผ่านไปเมื่อตัวบันทึกเขียนลงในตารางแม้จะไม่ถึง BatchSize
(ลบออกใน 1.0.7.2) ค่าสถานะ CreateTblIfNotExist เมื่อตั้งค่าเป็นจริง ช่วยให้ผู้บันทึกสามารถสร้างตารางชื่อตารางที่ให้ไว้ในการกำหนดค่าในกรณีที่ไม่มีอยู่ในฐานข้อมูล แฟล็กนี้มีประโยชน์ในขณะที่ทดสอบตัวบันทึกในสภาพแวดล้อมการพัฒนา
ขณะนี้ไม่มีการใช้การตั้งค่าสถานะรวมข้อ ยกเว้นStackTrace และข้อยกเว้นที่สมบูรณ์ถูกบันทึกไว้ในตารางโดยไม่คำนึงถึงการตั้งค่าสถานะนี้
การตั้งค่าสถานะ 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]
สามารถบันทึกพารามิเตอร์ลงฐานข้อมูลได้เช่นกัน ในตัวอย่างนี้ เราต้องการบันทึก RequestId และขอบเขตไปยังฐานข้อมูล เพื่อให้ได้ผล คุณจะต้องสร้างคอลัมน์ขึ้นมาก่อน
การกำหนดค่านี้จะต้องผนวกเข้ากับส่วน SqlProvider
ใน Logging
นี่คือตัวอย่างวิธีการบันทึกพารามิเตอร์การบันทึกภายใน 2 .NET Core คุณสามารถขยายสิ่งนี้ได้ด้วยพารามิเตอร์ที่คุณใช้ในการบันทึก ตัวอย่างที่ดีที่นี่คือ {method}
สำหรับการบันทึกชื่อวิธีการโดยทั่วไป
"ScopeColumnMapping" : {
"RequestId" : " RequestId " ,
"SCOPEPATH" : " Scope "
}
คุณยังสามารถใช้รูปแบบการบันทึกที่คุณกำหนดเองได้โดยการจัดเตรียม loggingFormatter