C# NLog入门

20 篇文章 0 订阅


前言

  1. NLog是适用于各种.NET平台(包括.NET标准)的灵活,免费的日志记录平台。NLog使写入多个目标变得容易 。(数据库,文件,控制台)并即时更改日志记录配置。
  2. NLog支持结构化 和传统日志记录。
  3. NLog的重点是:高性能,易于使用,易于扩展和灵活配置。

一、特征

  1. 易于配置:
    通过配置文件 和以编程方式,NLog都非常易于配置。即使不重新启动应用程序,也可以更改配置。
  2. 可模板化:
    每个日志消息都可以使用各种布局渲染进行模板化
  3. 可扩展的:
    即使NLog具有目标和预定义的布局,您也可以编写自定义目标或传递自定义值
  4. 结构化日志:
    全面支持结构化日志记录

二、目标

目标用于显示,存储日志消息或将日志消息传递到另一个目标。NLog可以为每个日志消息动态写入多个目标之一。
现成提供了30多个目标,其中包括:

  1. 事件记录日志
    写入事件日志本地或远程

  2. 数据库
    将日志存储在.NET支持的 数据库中

  3. 控制台
    实时写入命令行控制台,包括消息的 颜色编码

  4. 电子邮件
    每当出现应用程序错误时, 您都可以发送电子邮件

  5. ASP.NET核心记录
    将日志消息写入ASP.NET Core日志记录

  6. 还有一些包装器目标,它们提供 缓冲, 负载平衡, 故障转移情况, 异步写入和更多方案。目标的完整列表在配置选项页面上。如果找不到适合您需求的目标,则可以 轻松编写自定义目标。

三、支持

NLog支持以下平台:

  • .NET Framework 3.5、4、4.5-4.8
  • .NET Framework 4客户端配置文件
  • Xamarin Android
  • Xamarin iOs
  • Windows Phone 8
  • Silverlight 4和5
  • 单声道4
  • ASP.NET 4(NLog.Web程序包)
  • ASP.NET Core(NLog.Web.AspNetCore程序包)
  • .NET Core(NLog.Extensions.Logging程序包)
  • .NET Standard 1.x-NLog 4.5
  • .NET Standard 2.x-NLog 4.5
  • UWP-NLog 4.5

四、入门

示例使用.net 5 MVC 演示文本日志记录方式

1.添加引用

版本请酌情晒下使用
在这里插入图片描述

2.创建配置文件

在项目的根目录中创建nlog.config(全部小写)文件。

<configuration>
	<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.txt">
		<extensions>
			<add assembly="NLog.Web.AspNetCore"/>
		</extensions>

		<targets>
			<target xsi:type="File" name="allfile" fileName="c:\temp\nlog-all-${shortdate}.log"
					layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />
			<target xsi:type="File" name="ownFile-web" fileName="c:\temp\nlog-own-${shortdate}.log"
					layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
		</targets>
		<rules>
			<logger name="*" minlevel="Trace" writeTo="allfile" />
			<logger name="Microsoft.*" maxlevel="Info" final="true" />
			<logger name="*" minlevel="Trace" writeTo="ownFile-web" />
		</rules>
	</nlog>

</configuration>

3.启用复制到bin文件夹

为nlog.config启用复制到bin文件夹
在这里插入图片描述

或.csproj手动编辑文件并添加:

<ItemGroup>
    <Content Update="nlog.config" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

4.更新program.cs

	public class Program
    {
        public static void Main(string[] args)
        {
            var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
            try
            {
                logger.Debug("init main");
                CreateHostBuilder(args).Build().Run();
            }
            catch (Exception exception)
            {
                //NLog: catch setup errors
                logger.Error(exception, "Stopped program because of exception");
                throw;
            }
            finally
            {
                // Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
                NLog.LogManager.Shutdown();
            }
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                })
                .ConfigureLogging(logging =>
                {
                    logging.ClearProviders();
                    logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
                })
                .UseNLog();  // NLog: Setup NLog for Dependency injection;
    }

5.配置appsettings.json

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Trace",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}

6.写日志

	public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;

        public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
            _logger.LogDebug(1, "NLog injected into HomeController");
        }

        public IActionResult Index()
        {
            _logger.LogInformation("Hello, this is the index!");
            return View();
        }

        public IActionResult Privacy()
        {
            return View();
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }

7.输出示例

启动ASP.NET Core网站时,我们得到两个文件:

在这里插入图片描述

2021-09-25 17:47:42.9103||DEBUG|TestNLog.Program|init main 
2021-09-25 17:47:44.1057||INFO|Microsoft.Hosting.Lifetime|Application started. Press Ctrl+C to shut down. 
2021-09-25 17:47:44.1193||INFO|Microsoft.Hosting.Lifetime|Hosting environment: Development 
2021-09-25 17:47:44.1240||INFO|Microsoft.Hosting.Lifetime|Content root path: D:\test\TestNLog 
2021-09-25 17:47:44.1850||INFO|TestNLog.Controllers.HomeController|Hello, this is the index! 
2021-09-25 17:47:42.9103||DEBUG|TestNLog.Program|init main |url: |action: 
2021-09-25 17:47:44.1850||INFO|TestNLog.Controllers.HomeController|Hello, this is the index! |url: http://localhost/|action: Index

对于C#中的NLog配置,您可以按照以下步骤进行操作: 1. 首先,在您的项目中添加NLog包。可以通过NuGet包管理器或手动引用NLog程序集来完成。 2. 在项目的根目录下创建一个名为"NLog.config"的文件,该文件将包含NLog的配置信息。 3. 打开"NLog.config"文件,并按照您的需求进行配置。配置文件使用XML格式,您可以定义日志记录器、目标和规则等。 下面是一个简单的NLog配置示例: ```xml <?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> <target name="console" xsi:type="Console" /> <target name="file" xsi:type="File" fileName="log.txt" /> </targets> <!-- 定义规则 --> <rules> <logger name="*" minlevel="Trace" writeTo="console" /> <logger name="*" minlevel="Debug" writeTo="file" /> </rules> </nlog> ``` 在上面的示例中,我们定义了两个目标:一个是控制台输出(target name="console"),另一个是写入文件(target name="file")。然后,我们定义了两条规则:一条是将所有日志记录到控制台(writeTo="console"),另一条是将所有Debug级别及以上的日志记录到文件(writeTo="file")。 请注意,这只是一个简单的示例配置。您可以根据自己的需求进行更复杂的配置,例如添加过滤器、使用不同的目标等。 完成配置后,您可以在代码中使用NLog进行日志记录。例如: ```csharp using NLog; class Program { private static Logger logger = LogManager.GetCurrentClassLogger(); static void Main(string[] args) { logger.Info("Hello, NLog!"); logger.Error("An error occurred."); // 其他日志级别:Debug, Warn, Fatal, Trace } } ``` 以上是一个简单的介绍,您可以根据自己的需要进行更详细的配置和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值