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

标签 c# linux ubuntu logging nlog

我正在尝试通过 NLog 将日志记录添加到 .NET 核心中的 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}
  • ${进程目录}
  • ${当前目录}
  • ${临时目录}
  • %appdata%

  • 另见:https://github.com/NLog/NLog/wiki/Internal-Logging
    在您的情况下,我可能会考虑在部署 NLog.config 时执行 token 搜索替换(在部署时搜索 XML 转换)。
    替代方法只是在启动时分配应用程序名称,如下所示:
    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>
    

    关于c# - 如何使用 NLog 在 Linux 上的 var/log/my-app-dir 中添加日志文件和文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64361421/

    相关文章:

    python - tensorflow 多 GPU 训练

    ubuntu - 通过 Chef solo 和 Vagrant 安装 apt 包

    c# - MVVM 中的阻塞 UI

    c# - 按名字/姓氏组合搜索时遇到问题

    linux - 如何让我的 BASH 脚本知道保存的路径

    linux - 在内核模块中生成随机数

    c# - 如果错误记录在脚本中,PlayMode 测试默认停止

    c# - 如何跟踪数据库中的更改

    linux - TCP 套接字发送缓冲区大小效率

    Tomcat7 ubuntu用户所有者