问题描述
我有一个系统,我想制作一个自定义日志来为每个用户创建单独的文件夹。现在,我像自定义文件目标一样在 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