ورود به سیستم یکی از مهم ترین موارد در توسعه اپلیکیشن است. این اساسی است و به عیب یابی هر گونه مشکل برنامه کمک می کند. مانند سایر کتابخانه های دات نت، ما می توانیم Serilog را در برنامه دات نت پیاده سازی کنیم. Serilog ثبت تشخیصی را برای فایل ها، کنسول، پایگاه داده و جاهای دیگر فراهم می کند.
در این مقاله نحوه پیاده سازی Serilog در ASP.NET Core 5.0 Web API Project و ذخیره log in پایگاه داده را یاد خواهیم گرفت.
پیش نیازها
- ویژوال استودیو 2019
- سرور MSSQL
من فرض کردم که شما قبلاً پروژه ASP.NET Core 5.0 WebAPI را ایجاد کرده اید. ابتدا باید بسته های زیر را برای پیاده سازی Serilog و گرفتن Log in Database نصب کنیم. Command line را باز کنید و دستور زیر را اجرا کنید.
Install-Package Serilog.AspNetCore
Install-Package Serilog.Sinks.MSSqlServer
یا
می توانید آن را از Nugget Package Manager نیز نصب کنید.
برای گرفتن Log in database باید Table را در پایگاه داده خود ایجاد کنیم. با استفاده از اسکریپت زیر در پایگاه داده خود جدول ایجاد کنید.
- CREATE TABLE [dbo].[Log](
- [Id] [int] IDENTITY(1,1) NOT NULL,
- [Message] [nvarchar](max) NULL,
- [MessageTemplate] [nvarchar](max) NULL,
- [Level] [nvarchar](128) NULL,
- [TimeStamp] [datetimeoffset](7) NOT NULL,
- [Exception] [nvarchar](max) NULL,
- [Properties] NULL,
- [LogEvent] [nvarchar](max) NULL,
- [UserName] [nvarchar](200) NULL,
- [IP] [varchar](200) 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, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
- ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
برای ذخیره Log in پایگاه داده باید رشته اتصال را در appsetting.json اضافه کنیم.
نمونه کد appsetting.json
- {
- "ConnectionStrings": {
- "DemoSeriLogDB": "Data Source=yourDBServer;Initial Catalog=yourDatabaseName;Persist Security Info=True;User ID=yourDbUserId;Password=yourDBPassword;Pooling=False;MultipleActiveResultSets=False;Connect Timeout=60;TrustServerCertificate=False"
- },
- "Logging": {
- "LogLevel": {
- "Default": "Information",
- "Microsoft": "Warning",
- "Microsoft.Hosting.Lifetime": "Information"
- }
- },
- "AllowedHosts": "*",
- }
فایل Program.cs کد زیر را بنویسید. این کد به خواندن فایل های Json کمک می کند و می توانیم مقادیری مانند Connection string را از Json دریافت کنیم.
- public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
- .SetBasePath(Directory.GetCurrentDirectory())
- .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
- .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true)
- .Build();
کد زیر را در تابع Main فایل Program.cs بنویسید تا رشته اتصال را از فایل Json دریافت کنید.
- string connectionString = Configuration.GetConnectionString("DemoSeriLogDB");
به طور مشابه، ما باید کد زیر را در فایل Program.cs تابع اصلی بنویسیم تا سینک Serilog را ثبت یا تنظیم کنیم که رویدادهای گزارش را در یک جدول در پایگاه داده MSSQL Server می نویسد.