设置Nlog以登录.net核心应用程序的正确方法是什么?

时间:2019-05-14 21:14:05

标签: .net-core console nlog

为.net核心控制台应用程序设置NLog日志记录的正确方法是什么?我看到Wiring and injected NLog into a .Net Core console application中提到以某种方式使用Microsoft.Extensions.Logging.ILogger,但没有示例,而我也遇到了获取null的问题。我在发布中尝试了其他示例,但同样的事情是null对象。

作为更新,我通过添加NLog.Config的using语句,然后使用LogManager.GetCurrentClassLogger进行以下工作。我在另一篇文章中看到了这一点,但是我不确定为什么会起作用或者它是否正确。因此,我仍然希望有人可以启发我以正确的方法在.net core中进行NLog设置,或者如果这是正确的方法,请告诉我。

谢谢


using Microsoft.Extensions.Logging;
using NLog;
using NLog.Config;
using NLog.Extensions.Logging;

static void Main(string[] args)
    {
        var logger = LogManager.GetCurrentClassLogger();

        //service collection are were we register our services
        var serviceCollection = new ServiceCollection();
        ConfigureServices(serviceCollection);

        serviceCollection.AddLogging();

        //service provider is where we get our services
        serviceProvider = serviceCollection.BuildServiceProvider();

        //logging (ILoggerFactory requires Microsoft.Extensions.Logging dependency and adding a using statement)
        var loggerFactory = serviceProvider.GetService<ILoggerFactory>();

        //NLog.LogManager.LoadConfiguration("NLog.config");

        //AddNLog required adding dependency NLog.Extensions.Logging and then adding a using statement
        loggerFactory.AddNLog().ConfigureNLog("NLog.config");

        logger.Debug("I successfully logged a debug via NLog!");

    }

1 个答案:

答案 0 :(得分:0)

添加和使用 NLog 并支持 ASP.Net Core 5 的最佳和最新方法见 github

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using NLog.Web;

namespace ASP.NET_Core_5_NLog_Example
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var logger = 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(LogLevel.Trace);
                })
                .UseNLog();  // NLog: Setup NLog for Dependency injection
    }
}