【问题标题】:Where is ${basedir} located, using NLog?${basedir} 位于哪里,使用 NLog?
【发布时间】:2016-05-15 10:33:45
【问题描述】:

除非我完全想念它,否则我的印象是NLog documentation 在其示例中使用${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>

据我所知,它可以工作,但我不知道它在哪里记录任何内容。

【问题讨论】:

  • 记得在 Visual Studio 中更改文件属性,以便将 NLog-config-file 复制到输出目录 => 始终。或者将 nlog-config 注入 app.config gist.github.com/Chrisso/1703644

标签: c# .net vb.net logging nlog


【解决方案1】:

${basedir} — 应用程序运行的目录,又名。 AppDomain.BaseDirectory

我想,你会发现this manual page 很有帮助。

【讨论】:

  • 那么bin\debug文件夹,如果你是从VS运行它?在那种情况下它不起作用,因为我没有看到任何文件。不过我没有收到任何错误。
  • @Spikee 您可以通过 AppDomain.CurrentDomain.BaseDirectory 在您的应用程序中检查它
  • 确实是bin\debug,但我没有看到logs 子文件夹,也没有任何文件。
  • @Spikee 我现在试过了,它对我有用。你确定你捕获并记录你的异常吗?你确定你调用 LogManager.Flush();在关闭应用程序之前?
  • 请注意,对于 asp.net 项目,${basedir}(以及 AppDomain.CurrentDomain.BaseDirectory)指向您网站的根目录,该根目录(使用 Visual Studio 时)是包含ASP.NET 网站的入门级 ASP.NET 项目的源代码(在 Visual Studio 中进行调试时,ASP.NET 网站不存在“bin/[Debug-Release]”部分)。我找不到我的日志文件,因为我在使用 VS 时在错误的文件夹中查找它们。有趣吧? stackoverflow.com/a/8669872/863651
【解决方案2】:

根据已经提供的答案和cmets,可以总结出.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>

【讨论】:

  • 关于 internalLogFile 的好提示。
  • 我们知道${basedir}是否可以在internalLogFile中使用吗?
【解决方案3】:

另一种失败的可能性是,如果你使用 NLog.config,NLog 找不到配置文件。在您的构建中将文件设置为始终复制,它将最终在您的 bin 目录中,因此 NLog 可以在运行时找到它。

如果你将 NLog 配置信息复制到你的 App.config 中,就不会出现这个问题。

【讨论】:

  • 我也遇到了类似的事情,我需要在我的 Visual Studio 中为“NLog.xsd”(在 NLog 配置中引用)的副本翻转“复制到输出”选项项目之前我可以在测试期间将任何日志写入我的“bin/debug”文件夹。
  • 永远不要将任何内容设置为“始终复制”。使用“如果更新则复制”,否则您的构建将始终被视为过期(即使没有任何更改,它也会编译项目)
【解决方案4】:

这也取决于平台。对于常规的 .Net 项目,它确实是 bin 或 bin/debug 等(取决于您的构建设置)

对于 coreclr / aspnet5,它是 dnx 运行时的 bin 文件夹。这仍在进行中。

【讨论】:

  • 这仍然是真的吗?
猜你喜欢
  • 1970-01-01
  • 2013-09-08
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多