Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 在NLog目标中使用${basedir}创建一个同名文件夹_Asp.net Core_Nlog - Fatal编程技术网

Asp.net core 在NLog目标中使用${basedir}创建一个同名文件夹

Asp.net core 在NLog目标中使用${basedir}创建一个同名文件夹,asp.net-core,nlog,Asp.net Core,Nlog,我正在Asp.Net core 2.0项目中使用NLog.Web.AspNetCore。如果我使用以下目标: <target xsi:type="File" name="allfile" fileName="${basedir}/nlog-all-${shortdate}.log" 当出现内部Nlog错误时,它将写入名为“${basedir}”的文件夹中的此文件 创建了${basedir}文件夹,因为NLog内部记录器非常原始,不知道布局渲染 更新NLog版本。4.6增加了对在中使用$

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

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

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

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

  • 更新NLog版本。4.6增加了对在中使用
    ${basedir}
    的支持
Asp.Net.Core的解决方法如下(在
程序.cs中添加了两行新代码):

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

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

您是否已更新到
NLog.Web.AspNetCore版本。4.5.0-rc3和NLog版本。4.5.0-rc06
,并在
Program.cs
中更新了您的代码以匹配(请参阅
LogManager.LoadConfiguration的用法)
内部日志文件
非常基本(保持简单和可预测),因此它没有像
${basedir}
这样的知识输出布局渲染器。它很可能是创建目录的internalLogFile。
${basedir}
表示AppDomain.BaseDirectory。您希望basedir去哪里?已创建,因此可以访问${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安装“最新稳定版”。我收到两个错误:“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?(已更新代码以修复第一个错误)我安装了这两个版本。但我仍然得到了第一个错误。(我应该写“集合不需要重载1个参数。”)太好了!它工作得很好。非常感谢你的帮助。我注意到您调用CreateDefaultBuilder,然后将json文件和环境变量添加到配置中。CreateDefaultBuilder已经添加了这些参数以及UserSecrets和命令行参数。这似乎有点重复。@daniel.caspers答案是在NLog 4.6发布之前写的,但现在已经更新了我的答案。
var appBasePath = System.IO.Directory.GetCurrentDirectory();
NLog.GlobalDiagnosticsContext.Set("appbasepath", appBasePath);
var logger = LogManager.LoadConfiguration("nlog.config").GetCurrentClassLogger();
<target xsi:type="File" name="allfile" fileName="${gdc:item=appbasepath}/Logs/nlog-all-${shortdate}.log"