如何将 Microsoft.Extesions.ILogger 与 NLog 一起使用?

问题描述

我有一个系统,我想制作一个自定义日志来为每个用户创建单独的文件夹。现在,我像自定义文件目标一样在 NLog.Logger 中制作它

public static LogFactory ConfigureCustomNLog(string userName)
        {
            var target = new FileTarget();
            target.Name = "fileLog";
            target.FileName = $"${{basedir}}/log" + $"/{userName}/{userName}" + "${shortdate}.log";
            target.Layout =
                "${longdate}|${uppercase:${level}} ${logger}|${message} ${exception:format=ToString,StackTrace}";

            var config = ConfigureNLog("NLog.Config").Configuration;
            config.RemoveTarget("fileLog");
            config.AddTarget(target.Name,target);

            var rule = new LoggingRule(userName,LogLevel.Debug,target);
            config.LoggingRules.Add(rule);

            LogManager.Configuration = config;

            return LogManager.LogFactory;
        }

一切正常,但我想像 Microsoft.Extensions.ILogger 一样使用。如何将 NLog.Logger 导入 ILogger?或者如何为 ILogger 进行自定义配置?

解决方法

通常 Microsoft ILogger 与依赖项注入一起使用。就像这里描述的那样:

https://github.com/NLog/NLog/wiki/Getting-started-with-.NET-Core-2---Console-application

但您也可以手动完成:

class MyClass
{
    private readonly Microsoft.Extensions.Logging.ILogger Logger;
 
    public MyClass(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory)
    {
        Logger = loggerFactory.CreateLogger(GetType().ToString());
        Logger.LogInformation("Hello");
    }
}

var loggerFactory = new NLog.Extensions.Logging.NLogLoggerFactory();
var myClass = new MyClass(loggerFactory);

如果您正在构建 Web 应用程序,那么这可能会有所帮助:https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-5