.NET 8.0 使用Nlog 记录日志到本地并写入SQLserver数据库
1. 安装Nlog及相关组件
NLog:5.4.0
NLog.Database:5.4.0
NLog.Web.AspNetCore:5.4.0
Microsoft.Data.SqlClient: 5.2.2 (写入SQLServer数据库用的)
2. 建表SQL
CREATE TABLE [dbo].[NLog]( [Id] [bigint] IDENTITY(1,1) NOT NULL, [Application] [nvarchar](50) NOT NULL, [Logged] [datetime] NOT NULL, [Level] [nvarchar](50) NOT NULL, [Message] [nvarchar](max) NOT NULL, [Logger] [nvarchar](250) NULL, [Callsite] [nvarchar](max) NULL, [Exception] [nvarchar](max) NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO
3. nlog.config配置文件
<?xml version="1.0" encoding="utf-8"?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" internalLogLevel="Info" internalLogFile="c:\temp\internal-nlog-AspNetCore.txt"> <!-- enable asp.net core layout renderers --> <extensions> <add assembly="NLog.Web.AspNetCore"/> </extensions> <targets> <target name="database" xsi:type="Database"> <connectionString>Server=localhost;Database=Travel;User=sa;Password=123456;Encrypt=True;TrustServerCertificate=True; </connectionString> <commandText> INSERT INTO dbo.NLog ([Application], [Logged], [Level], [Message], [Logger], [CallSite],[Exception]) VALUES (@application, @logged, @level, @message,@logger, @callSite, @exception); </commandText> <parameter name="@application" layout="AspNetCoreNlog" /> <parameter name="@logged" layout="${date}"/> <parameter name="@level" layout=" ${level}" /> <parameter name="@message" layout="${message}"/> <parameter name="@logger" layout="${logger}" /> <parameter name= "@callSite" layout="${callsite:filename=true}" /> <parameter name="@exception" layout="${exception:tostring}"/> </target> <!--记录日志在本地--> <!-- File Target for all log messages with basic details --> <target xsi:type="File" name="allfile" fileName="NLog\nlog-all-${shortdate}.log" layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" /> <target xsi:type="File" name="ownFile-web" fileName="NLog\nlog-my-${shortdate}.log" layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" /> <target xsi:type="Null" name="blackhole"/> </targets> <rules> <logger name="Microsoft.*" finalMinLevel="Warn" writeTo="database" /> <logger name="Microsoft.AspNetCore.Hosting.*" finalMinLevel="Error" writeTo="database" /> <logger name="*" minlevel="Info" writeTo="database" /> <logger name="*" minlevel="Trace" writeTo="allfile" /> <!--<logger name="*" minlevel="Trace" writeTo="ownFile-web" />--> </rules> </nlog>
Program.cs写法
//添加到builder.Build()之前即可 builder.Logging.ClearProviders(); builder.Host.UseNLog();
代码写法
[ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> logger) { _logger = logger; } [HttpGet(Name = "GetWeatherForecast")] public IEnumerable<WeatherForecast> Get() { _logger.LogError("系统错误"); return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); } }
Nlog官网.Net6 示例:https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-6
写入SQLServer数据库:https://sodiqyekeen.com/database-logging-using-nlog-in-net-6/
转摘:https://www.cnblogs.com/wofeiliangren/p/17879386.html

浙公网安备 33010602011771号