.Net 日志系统-NLog

NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码。

NLog虽然没有log4net框架的流行程度高,但是它的跨平台性、开源持续维护性、性能等方面优于log4net,具体可以看下面这篇文章:

日志框架对比 NLog VS Log4net - fengrui - 博客园

.Net Core程序记录日志到文本文件中,下面用代码来演示如何实现:

基于.Net Core WebApi 3.1程序,项目结构如下图:

 

1.NuGet应用程序集:NLog

2.在项目的根目录下创建配置文件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">

	<!--输出目标,往哪里输出-->
	<targets>
		<!--type:日志输出类型 File:文件 ColoredConsole:控制台-->
		<!--fileName:日志存储的路径及名称-->
		<!--layout:日志输出格式-->

		<target name="log_file" xsi:type="File"
		  fileName="${basedir}/Logs/${shortdate}/${shortdate}.txt"
		  layout="${longdate} | ${event-properties:item=EventId_Id:whenEmpty=0} | ${uppercase:${level}} | ${logger} | ${message} ${exception:format=tostring}"
		  archiveFileName="${basedir}/archives/${shortdate}-{#####}.txt"
		  archiveAboveSize="102400"
		  archiveNumbering="Sequence"
		  concurrentWrites="true"
		  keepFileOpen="false" />
			
		<!--<target name="console" xsi:type="ColoredConsole" layout="[${date:format=HH\:mm\:ss}]:${message} ${exception:format=message}" />-->
	</targets>

    <!--定义使用哪个target输出-->
	<rules>
		<logger name="*" minlevel="Trace" writeTo="log_file" />
		<!--<logger name="*" minlevel="Debug" writeTo="console" />-->
	</rules>
</nlog>

并设置该文件为始终复制,确保改动配置文件实时生效。

 

3.项目中记录日志信息

using Microsoft.AspNetCore.Mvc;
using NLog;

namespace NLogProject.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private readonly Logger _logger = LogManager.GetCurrentClassLogger();

        [HttpGet]
        public void Get()
        {
            _logger.Trace("我是Nlog输出的Trace信息");
            _logger.Debug("我是Nlog输出的Debug信息");
            _logger.Info("我是Nlog输出的Info信息");
            _logger.Warn("我是Nlog输出的Warn信息");
            _logger.Error("我是Nlog输出的Error信息");
            _logger.Fatal("我是Nlog输出的Fatal信息");
        }
    }
}

程序执行后,默认会在项目的文件夹中生成对应日期的日志文件

 

日志文件信息:

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用NLog日志记录到SqlServer的步骤: 1. 首先,需要在项目中安装NLogNLog.Web.AspNetCore包。可以使用NuGet包管理器或在项目文件中手动添加依赖项。 2. 在项目的appsettings.json文件中添加以下NLog配置: ``` "NLog": { "targets": { "database": { "type": "Database", "dbProvider": "System.Data.SqlClient", "connectionString": "Server=[server];Database=[database];User Id=[user];Password=[password];", "commandText": "INSERT INTO [Logs] ([Date], [Level], [Logger], [Message], [Exception]) VALUES (@Date, @Level, @Logger, @Message, @Exception);", "parameter": [ { "name": "@Date", "layout": "${date}" }, { "name": "@Level", "layout": "${level}" }, { "name": "@Logger", "layout": "${logger}" }, { "name": "@Message", "layout": "${message}" }, { "name": "@Exception", "layout": "${exception}" } ] } }, "rules": [ { "logger": "*", "minLevel": "Trace", "writeTo": "database" } ] } ``` 3. 在Startup.cs文件中添加以下代码: ```csharp public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) { //... loggerFactory.AddNLog(); //... app.UseMiddleware<NLogMiddleware>(); //... } ``` 4. 创建一个名为Logs的表,用于存储日志记录。表结构应如下所示: ```sql CREATE TABLE [dbo].[Logs]( [Id] [int] IDENTITY(1,1) NOT NULL, [Date] [datetime2](7) NOT NULL, [Level] [nvarchar](50) NOT NULL, [Logger] [nvarchar](250) NOT NULL, [Message] [nvarchar](max) NOT NULL, [Exception] [nvarchar](max) NULL, CONSTRAINT [PK_Logs] 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] ``` 5. 现在,可以在代码中使用NLog记录日志了。例如: ```csharp private readonly ILogger<HomeController> _logger; public HomeController(ILogger<HomeController> logger) { _logger = logger; } public IActionResult Index() { _logger.LogInformation("Hello, world!"); return View(); } ``` 这将在Logs表中插入一条日志记录。 希望这可以帮助到你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值