【问题标题】:NLog - How to put in a specific log directoryNLog - 如何放入特定的日志目录
【发布时间】:2013-12-27 20:58:53
【问题描述】:

我正在使用 NLog,并希望使用非标准目录进行日志记录。我的应用程序在加载期间将加载一个“LogFileLocation”参数,该参数存储日志文件目录的位置。

是否可以使用非标准的日志文件目录?如果是这样,如果我设置了 autoReload="true",我还可以在运行时更新它吗?

【问题讨论】:

  • 为什么是非标准位置?您要保存到的是 PC 还是网络位置?
  • 我想没必要。这个应用程序一直都是这样。现在会有一个服务和一个应用程序写入相同的位置 - 因为它们将位于相对不同的目录 { /service 和 /administrator} 中,那么可能也很难有一个共同的位置?

标签: vb.net nlog


【解决方案1】:

首先,按照惯例,我会将应用程序任何部分的日志文件保留在默认位置,因为这是其他开发人员期望的位置。

我在 WinForms ApplicationEvents 中使用 vb.net“设置”做了类似的事情,以从用户特定值中提取一个值,结果不一(应用程序升级导致问题)。归根结底,如果那是您的鱼缸,那么逻辑不能很好地转换为 C#。

我假设您已经通过 app.config Nlog config settings 如下所示。我假设您可以在父 app.config 级别对值进行硬编码,以使其适用于应用程序的管理和服务组件。

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<variable name="logDirectory"
          value="${basedir}/logs/${date:format=yyyyMMdd}/"/>
<targets async="true">
  <target name="AppFullLog"
          layout="${longdate}    ${level:uppercase=true}     ${logger} on ${machinename} by ${windows-identity}.${newline}${message}${newline}Stack:${stacktrace}${newline}-------"
          xsi:type="File"
          fileName="${logDirectory}CadiFull.log">
  </target>
  <target name="AppErrorLog"
          layout="${longdate}    ${level:uppercase=true}     ${logger} on ${machinename} by ${windows-identity}.${newline}${message}${newline}Stack:${stacktrace}${newline}-------"
          xsi:type="File"
          fileName="${logDirectory}CadiErrors.log">
  </target>
</targets>
<rules>
  <logger name="*"
          writeTo="AppFullLog" />
  <logger name="*"
          levels="Error,Fatal"
          writeTo="AppErrorLog" />
</rules>

最后,如果您试图将所有错误日志集中到一个位置,您可以随时将数据发送到服务器数据库。 Nlog 提供了实现这一目标的选项。

【讨论】:

  • 谢谢,我会调查的。我想我可能会接受您的第一个建议,而不是更改日志文件目录。不过,我仍然有多个应用程序的问题。如果我硬编码,那么如果用户决定在安装软件时使用自定义目录,我就会遇到问题:(
猜你喜欢
  • 2021-01-28
  • 2019-12-30
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
  • 2016-05-05
相关资源
最近更新 更多