在使用NLog时,${basedir}位于哪里?

39

除非我完全错过了,否则我的印象是NLog文档在示例中使用${basedir}而没有解释其位置应该在哪里。

我在哪里可以找到列出所有可能选项及其有意义描述的信息?

我已定义此配置:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwExceptions="true">
  <targets>
    <target name="file" xsi:type="File"
                layout="${longdate} ${logger} ${message}"
                fileName="${basedir}/logs/${shortdate}.txt"
                keepFileOpen="false"
                encoding="iso-8859-2" />
  </targets>
  <rules>
    <logger name="*" minlevel="Debug" writeTo="file" />
  </rules>
</nlog>

就我所知,它似乎能够正常运行,但我不知道它记录任何信息的位置。


3
记得在Visual Studio中更改NLog配置文件的文件属性,将其设置为“复制到输出目录”=>“始终”。或者将nlog-config注入到app.config中。https://gist.github.com/Chrisso/1703644 - Rolf Kristensen
4个回答

42

7
如果你是通过VS运行的话,那么bin\debug文件夹就不起作用了,因为我看不到任何文件。不过我也没有收到任何错误信息。 - Spikee
1
确实是 bin\debug,但我没有看到 logs 子文件夹,也没有任何文件。 - Spikee
1
请注意,对于 ASP.NET 项目,${basedir}(以及 AppDomain.CurrentDomain.BaseDirectory)指向您的网站根目录,该目录(在使用 Visual Studio 时)包含您的 ASP.NET 网站入门级别项目的源代码。当您从 Visual Studio 进行调试时,在 ASP.NET 网站中没有“bin / [Debug-Release]”部分。我在使用 VS 时找不到我的日志文件,因为我正在错误的文件夹中寻找它们。有趣吧?https://dev59.com/-moy5IYBdhLWcg3wQr1i#8669872 - XDS
附加说明:Julian声称在aspnet-core中/bin文件夹包含在${basedir} (AppDomain.CurrentDomain.BaseDirectory)中(想象一下...)。请记住这一点。 - XDS
如果我使用fileName="${basedir}/filename.log",它会在我的asp.net core根文件夹中创建一个名为"${basedir}"的空文件夹,并将日志文件放在"bin\Debug\netcoreapp2.0"中。为什么它没有替换${basedir}? - John Pankowicz
显示剩余2条评论

8

根据已有的答案和评论,可以总结出针对.NET应用程序的答案:

AppDomain.CurrentDomain.BaseDirectory

对于控制台或Windows窗体应用程序,在Visual Studio中此目录为bin/debug。如果应用程序已部署,则路径很可能是可执行文件路径。

对于Web应用程序(ASP.NET),这将是Web应用程序根目录。

看不到任何文件可能会触发多种原因,包括:NLog配置错误和无法写入目标文件。为了暴露这些错误,请确保NLog.config(或嵌入在web.config或app.config中的Nlog配置)指定了内部日志文件以输出此类错误:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      internalLogFile="C:\NLogError\NLog.log">

<!-- targets and rules come here -->

</nlog>

3
内部日志文件的提示很好。 - Chris Peacock
1
我们知道${basedir}是否可以在internalLogFile中使用吗? - enorl76

4
另一种可能的失败情况是,如果您正在使用NLog.config,则NLog找不到配置文件。在构建中将文件设置为“始终复制”,它将出现在bin目录中,以便NLog可以在运行时找到它。
如果将NLog配置信息复制到App.config中,则不会出现此问题。

我也遇到了类似的问题,需要在我的Visual Studio项目中为“NLog.xsd”的副本翻转“复制到输出”选项(该文件在NLog配置中被引用),然后才能在测试期间将任何日志写入我的“bin/debug”文件夹。 - Dalek Control
永远不要将任何东西设置为“始终复制”。使用“只复制更新的文件”,否则您的构建总会被认为已过期(即使没有更改项目,它也会编译该项目)。 - Ammo Goettsch

3

这取决于平台。对于常规的 .Net 项目,它通常是 bin 或 bin/debug 等(根据您的构建设置而定)。

对于 coreclr / aspnet5 项目,它是您的 dnx 运行时的 bin 文件夹。这仍然是一个正在进行中的工作。


这还是真的吗? - enorl76

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