我正在尝试通过 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 主要用于诊断和故障排除,因此为了简单和减少错误机会,动态控制日志路径的逻辑相当有限。
您现在可以使用以下关键字:
另见: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/