我正试图通过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}
- ${processdir}
- ${currentdir}
- ${tempdir}
- %appdata%
另请参阅:https://github.com/NLog/NLog/wiki/Internal-Logging
在您的情况下,我可能会考虑在部署NLog.config
时执行令牌搜索替换(在部署时搜索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>