码迷,mamicode.com
首页 > Web开发 > 详细

.Net Core使用NLog记录日志

时间:2018-06-12 16:12:06      阅读:532      评论:0      收藏:0      [点我收藏+]

标签:form   属性   ensure   覆盖   final   core   turn   asp   stop   

  参见:https://github.com/NLog/NLog.Web/wiki/Getting-started-with-ASP.NET-Core-2

大致步骤:

  • Nuget中引用NLog及NLog.Web.AspNetCore 4.5+
  • 创建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="logs\internal-nlog.txt">

  <!-- enable asp.net core layout renderers -->
  <extensions>
    <add assembly="NLog.Web.AspNetCore"/>
  </extensions>

  <!-- the targets to write to -->
  <targets>
    <!-- write logs to file  -->
    <target xsi:type="File" name="allfile" fileName="logs\nlog-all-${shortdate}.log"
            layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />

    <!-- another file log, only own logs. Uses some ASP.NET core renderers -->
    <target xsi:type="File" name="ownFile-web" fileName="logs\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 to map from logger name to target -->
  <rules>
    <!--All logs, including from Microsoft-->
    <logger name="*" minlevel="Trace" writeTo="allfile" />

    <!--Skip non-critical Microsoft logs and so log only own logs-->
    <logger name="Microsoft.*" maxLevel="Info" final="true" />
    <!-- BlackHole without writeTo -->
    <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
  </rules>
</nlog>
  • 右键nlog.config,属性,生成操作设为“内容”,复制到输出目录为“始终复制”
  • Program.cs中:
var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
            try
            {
                logger.Debug("init main");

                var hostBuilder = CreateWebHostBuilder(args);
                var host = hostBuilder.Build();
                host.Run();
            }
            catch (Exception ex)
            {
                //NLog: catch setup errors
                logger.Error(ex, "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();
            }
  • 配置appsettings.json。注意在配置中的设置将覆盖代码中的SetMinimumLevel属性。所以要么删除“Default”使用代码中的配置,要么就要设置正确。
    {
        "Logging": {
            "LogLevel": {
                "Default": "Trace",
                "Microsoft": "Information"
            }
        }
    }

    注意:如你有多个环境,注意appsetings.Development.json的配置。

  • 使用:
using Microsoft.Extensions.Logging;

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

    public HomeController(ILogger<HomeController> logger)
    {
        _logger = logger;
    }

    public IActionResult Index()
    {
        _logger.LogInformation("Index page says hello");
        return View();
    }
  • 结果查看。如你的配置与我一致,则在项目的logs文件夹会存在internal-nlog.txt文件。在bin\Debug\netcoreapp2.1\logs目录下会以日期存在输出日志。

.Net Core使用NLog记录日志

标签:form   属性   ensure   覆盖   final   core   turn   asp   stop   

原文地址:https://www.cnblogs.com/ceci/p/9173037.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!