如何使用 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>
我正在尝试通过 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>