gpt4 book ai didi

asp.net-core - 如何配置 nlog 以在 FileTarget 中使用 IHostingEnvironment.ContentRootPath

转载 作者:行者123 更新时间:2023-12-02 20:59:40 27 4
gpt4 key购买 nike

我正在尝试为我的 asp.net core 应用程序添加 NLog。所以我完全按照这里的描述配置它https://github.com/NLog/NLog.Extensions.Logging 。我还添加了 https://github.com/NLog/NLog.Web也有默认配置。到目前为止一切顺利,一切都按预期进行。

现在我想将日志文件存储在示例 c:\temp\nlog-own-${shortdate}.log 中指定的编码文件夹中,而不是存储在取决于当前项目的文件夹中。在我之前的 ASP.NET 项目中,我使用了类似 ${basedir}\App_Data\Logs\nlog-own-${shortdate}.log 的内容。现在它也可以工作,但将文件放在 bin 目录中。但我想配置将这些文件放置在 IHostingEnvironment.ContentRootPath 文件夹中。基本上我想要这样的东西

    private static Logger Logger = LogManager.GetCurrentClassLogger();
private IHostingEnvironment _HostingEnvironment;
public UserController(IHostingEnvironment env)
{
_HostingEnvironment = env;
}

public IActionResult Index()
{
var fileTarget = Logger.Factory.Configuration.FindTargetByName<NLog.Targets.FileTarget>("ownFile-web");
fileTarget.FileName = new SimpleLayout(
@"${basedir}\App_Data\Logs\nlog-own-${shortdate}.log"
.Replace("${basedir}", _HostingEnvironment.ContentRootPath)
);
Logger.Info("Index page says hello");

return View(new UserListArgs());
}

但以更优雅的方式。

最佳答案

类似这样的事情:

更新:在 NLog 4.4 中,这可以在一行中完成(LayoutRenderer.Register)

自 NLog 4.4

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
ILoggerFactory loggerFactory)
{

//add NLog to ASP.NET Core
loggerFactory.AddNLog();

//needed for non-NETSTANDARD platforms: configure nlog.config in your project root
env.ConfigureNLog("nlog.config");

LayoutRenderer.Register("basedir", (logEvent) => env.ContentRootPath);

...
}

NLog 4.4 之前

[LayoutRenderer("basedir")]
public class AspNetCoreBaseDirLayoutRenderer : LayoutRenderer
{
public static IHostingEnvironment Env {get;set;}

protected override void Append(StringBuilder builder, LogEventInfo logEvent)
{
builder.Append(env.ContentRootPath);
}
}

注册:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
//add NLog to ASP.NET Core
loggerFactory.AddNLog();


//needed for non-NETSTANDARD platforms: configure nlog.config in your project root
env.ConfigureNLog("nlog.config");
...

//overwrite ${basedir}
AspNetCoreBaseDirLayoutRenderer.Env = env;
ConfigurationItemFactory.Default.LayoutRenderers
.RegisterDefinition("basedir", typeof(AspNetCoreBaseDirLayoutRenderer ));
...

关于asp.net-core - 如何配置 nlog 以在 FileTarget 中使用 IHostingEnvironment.ContentRootPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38952948/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com