【问题标题】:Using ${basedir} in NLog target creates a folder by that name在 NLog 目标中使用 ${basedir} 会创建一个该名称的文件夹
【发布时间】:2018-02-24 02:58:31
【问题描述】:

我在 Asp.Net core 2.0 项目中使用 NLog.Web.AspNetCore。如果我使用以下目标:

<target xsi:type="File" name="allfile" fileName="${basedir}/nlog-all-${shortdate}.log"

它会在我的应用程序的 ContentRoot 文件夹中创建一个名为“${basedir}”的空文件夹。它将日志文件放在 bin\Debug\netcoreapp2.0 中。

为什么不替代 ${basedir}?如果我使用日志文件夹的完整路径,它工作正常。

我应该补充一点,我在 nlog.config 中的 元素内也有以下内容:

internalLogFile="${basedir}/internal-nlog.txt"

当出现内部 Nlog 错误时,它会写入名为“${basedir}”的文件夹中的此文件。

【问题讨论】:

  • 您是否更新到NLog.Web.AspNetCore ver. 4.5.0-rc3NLog ver. 4.5.0-rc06,并更新了Program.cs 中的代码以匹配github.com/NLog/NLog.Web/wiki/…(参见LogManager.LoadConfiguration 的用法)
  • internalLogFile 是非常基础的(为了保持简单和可预测),所以它不知道像${basedir} 这样的输出布局渲染器。很可能是创建目录的 internalLogFile。
  • ${basedir} 表示 AppDomain.BaseDirectory。您希望 basedir 去哪里?
  • 创建github.com/NLog/NLog.Web/pull/253,所以可以访问${aspnet-appbasepath}(匹配IHostingEnvironment.ContentRootPath和旧的IApplicationEnvironment.ApplicationBasePath)
  • 这是我第一次使用 NLog。我已按照您对 .Net Core 2.0 的说明进行操作。它只说安装 NLog.Web.AspNetCore。现在,如果我也尝试安装 NLog,它会显示“包还原失败。正在回滚……”。我正在为两者安装“最新稳定版”:NLog 4.4.12 和 NLog.Web.AspNetCore 4.4.1。

标签: asp.net-core nlog


【解决方案1】:

${basedir} 文件夹已创建,因为 NLog 内部记录器非常原始,不知道布局渲染。

  • 更新 NLog 版本。 4.6 增加了对在internalLogFile 中使用${basedir} 的支持

Asp.Net.Core 的解决方法可能如下(在Program.cs 中的Wiki Example 中添加了两行新行):

var appBasePath = System.IO.Directory.GetCurrentDirectory();
NLog.GlobalDiagnosticsContext.Set("appbasepath", appBasePath);
var logger = LogManager.LoadConfiguration("nlog.config").GetCurrentClassLogger();

然后你可以在你的nlog.config 中使用${gdc:item=appbasepath}

<target xsi:type="File" name="allfile" fileName="${gdc:item=appbasepath}/Logs/nlog-all-${shortdate}.log"

在等待${aspnet-appbasepath} 准备就绪时。

【讨论】:

  • 我收到 2 个错误:“Set 没有过载需要 2 个参数。” & “LogManager 没有 LoadConfiguration 方法”。当我安装 NLog.Web.AspNetCore 4.1.1 时,它会自动安装 NLog 5.0.0-beta07,它高于 nuget.org/packages/NLog 上的任何版本。所以我不知道我应该使用什么版本。
  • 就像我之前写的:你更新到 NLog.Web.AspNetCore 版本了吗? 4.5.0-rc3 和 NLog 版本。 4.5.0-rc06 ? (已更新代码以修复第一个错误)
  • 我安装了这两个版本。但我仍然得到第一个错误。 (我应该写“Set 没有重载需要 1 个参数。”)
  • 太棒了!它完美地工作。非常感谢您的帮助。我注意到您调用了 CreateDefaultBuilder,然后将 json 文件和环境变量添加到配置中。 CreateDefaultBuilder 已经添加了这些以及 UserSecrets 和命令行参数。好像有点重复。
  • @daniel.caspers 答案是在 NLog 4.6 发布之前写的,但现在更新了我的答案。
猜你喜欢
  • 2013-12-15
  • 2022-10-05
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-09
  • 2019-06-12
相关资源
最近更新 更多