在NLog目标中使用${basedir}会创建一个同名的文件夹。

4

我正在一个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,并且根据 https://github.com/NLog/NLog.Web/wiki/Getting-started-with-ASP.NET-Core-2 中的说明更新了 Program.cs 中的代码(请参考 LogManager.LoadConfiguration 的用法)? - Rolf Kristensen
创建了 https://github.com/NLog/NLog.Web/pull/253,这样就可以访问 ${aspnet-appbasepath}(匹配 IHostingEnvironment.ContentRootPath 和旧的 IApplicationEnvironment.ApplicationBasePath)。 - Rolf Kristensen
NLog在AspNetCore支持方面仍处于预发布阶段。尽管它很稳定且可以用于生产环境。结构化日志的引入和转换为Vs2017多目标项目导致了一些延迟。因此,现在您必须从“最新稳定版”中转移。 - Rolf Kristensen
我仍然对NLog和NLog.Web.AspNetCore之间的关系感到困惑。两者都需要吗?您针对Net Core的说明只提到安装NLog.Web.AspNetCore。但它们也谈到了更新NLog。 - John Pankowicz
NLog.Web.AspNetCore 是 NLog 的扩展,它依赖于 NLog 核心引擎。NLog.Web.AspNetCore 并不经常更新,因此通常依赖于旧版本的 NLog。因此建议手动更新到最新的 NLog。 - Rolf Kristensen
显示剩余4条评论
1个回答

9

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

Asp.Net.Core的解决方法可能如下(在Program.cs中添加了两行新代码,参见Wiki示例):

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}准备就绪时。


我遇到了两个错误:“Set没有接受2个参数的重载”和“LogManager没有LoadConfiguration方法”。当我安装NLog.Web.AspNetCore 4.1.1时,它自动安装了NLog 5.0.0-beta07,这比nuget.org/packages/NLog上的任何版本都要高。所以我不知道应该使用哪个版本。 - John Pankowicz
就像我之前写的一样:你已经更新到NLog.Web.AspNetCore ver. 4.5.0-rc3和NLog ver. 4.5.0-rc06了吗?(已经更新了代码以修复第一个错误) - Rolf Kristensen
1
太好了!它完美地运行了。非常感谢您的所有帮助。我注意到您调用了CreateDefaultBuilder,然后将json文件和环境变量添加到配置中。CreateDefaultBuilder已经会添加这些内容,还有UserSecrets和命令行参数。这似乎有点重复。 - John Pankowicz
很高兴它能正常工作。是的,你关于重复的说法是正确的。现在我已经更新了维基并删除了重复的配置。 - Rolf Kristensen
1
@daniel.caspers 这个答案是在 NLog 4.6 发布之前写的,但现在我已经更新了我的答案。 - Rolf Kristensen
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接