如何使用 NLog 在 Linux 上的 var/log/my-app-dir 中添加日志文件和文件夹

How to add log files and folder in var/log/my-app-dir on Linux with NLog

我正在尝试通过 NLog 向 .NET Core 中的 WebAPI 添加日志记录,但似乎无法 Linux 让我将日志文件写入 var/log/my-app。除了 SysLog 的扩展名,我找不到任何文档,但这不符合我的需要。目标是定义一个以应用程序命名的文件夹,并将内部、所有和自己的文件存储在那里,如下所示:

var
|-- log
    |-- my-app
        |-- internal.txt
        |-- nlog-all.log
        |-- nlog-own.log

我可能缺少文档或其他东西,但除了通过 SysLog 写入系统日志之外,我还没有找到如何指定更多内容。在像 Ubuntu 这样的 Linux 环境中,应该如何使用 NLog 执行此操作?

NLog InternalLogger 主要用于诊断和故障排除,因此为了简单和减少出错的可能性,动态控制日志记录路径的逻辑相当有限。

您现在可以使用以下关键字:

  • ${basedir}
  • ${processdir}
  • ${currentdir}
  • ${tempdir}
  • %应用数据%

另请参阅:https://github.com/NLog/NLog/wiki/Internal-Logging

在您的情况下,我可能会考虑在部署 NLog.config 时执行 token-search-replace(在部署时搜索 XML-transformations)。

或者在启动时像这样分配 application-name:

var logDir = "var/log/my-app";
NLog.GlobalDiagnosticsContext.Set("LogDir", logDir);
NLog.Common.InternalLogger.LogFile = System.IO.Path.Combine(logDir, "internal.txt");

有了这个NLog.config:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      throwConfigExceptions="true"
      internalLogLevel="info">

  <targets>
    <target xsi:type="File" name="allfile" fileName="${gdc:LogDir}/nlog-all.log"  />
    <target xsi:type="File" name="ownfile" fileName="${gdc:LogDir}/nlog-own.log" />
  </targets>

  <!-- rules to map from logger name to target -->
  <rules>
    <!--All logs, including from Microsoft-->
    <logger name="*" minlevel="Trace" writeTo="allfile" />

    <!--Skip non-critical Microsoft logs and so log only own logs-->
    <logger name="Microsoft.*" maxlevel="Info" final="true" />  <!-- BlackHole -->

    <logger name="*" minlevel="Trace" writeTo="ownfile" />
  </rules>
</nlog>