拥有不同配置的NLog记录器
本文关键字:NLog 记录器 配置 拥有 | 更新日期: 2023-09-27 18:02:25
在NLog中可以创建多个不同配置的记录器吗?
我有一个组件,每次实例化时必须将所有事件记录到与新实例相关的不同文件中。
这在NLog中可能吗?如果没有,有日志框架可以做到这一点吗?
可以。您可以将该类型的日志记录器配置为记录到特定目标。或者,您可以将该类型的记录器配置为记录到目标(例如文件),并根据记录器名称(自动)命名文件。
查看此处的NLog配置文件文档以获得一些示例。
另外,请参阅我在这里发布的一些配置文件提示。
下面是一个非常简短的示例,说明如何配置两个记录器:一个用于特定类型的记录器,将其记录到以该类型命名的输出文件中,另一个用于所有其他记录器,将其记录到基于日期的文件中。
<nlog>
<targets>
<target name="f1" xsi:type="File" fileName="${logger}.txt" />
<target name="f2" xsi:type="File" fileName="${shortdate}.txt" />
</targets>
<rules>
<logger name="Name.Space.Class1" minlevel="Trace" writeTo="f1" />
<logger name="*" levels="Debug" writeTo="f2" />
</rules>
</nlog>
如果您想要Name.Space类型的日志。Class1转到"特殊"文件(即其名称由记录器确定的文件),然后您可以向记录器规范添加"final",如下所示:
<logger name="Name.Space.Class1" minlevel="Trace"final="true" />
NLog的完整示例。配置
<?xml version="1.0"?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwExceptions="false" internalLogFile="''YOURSERVNAME'Logs'nlog-internal.log" internalLogLevel="Warn">
<variable name="basedir" value="${basedir}/Logs"></variable>
<targets>
<default-target-parameters xsi:type="File" fileName="${var:basedir}/Trace.csv" archiveFileName="${var:basedir}/Archives/Trace/Trace.{##}.csv" archiveNumbering="DateAndSequence" archiveDateFormat="yyyy-MM-dd" archiveEvery="Month" maxArchiveFiles="15" archiveAboveSize="10485760" keepFileOpen="false"/>
<default-wrapper xsi:type="BufferingWrapper" bufferSize="500" flushTimeout="10000" />
<target name="TraceLog" xsi:type="File">
<layout xsi:type="CsvLayout" delimiter="Semicolon">
<column name="Time" layout="${longdate}" />
<column name="Callsite" layout="${callsite}" />
<column name="Level" layout="${level}" />
<column name="User" layout="${Identity}" />
<column name="Message" layout="${message}" />
</layout>
</target>
<target name="ErrorLog" xsi:type="File" fileName="${var:basedir}/Errors.csv" archiveFileName="${var:basedir}/Archives/Errors/Errors.{##}.csv" maxArchiveFiles="10">
<layout xsi:type="CsvLayout" delimiter="Semicolon">
<column name="Time" layout="${longdate}" />
<column name="Callsite" layout="${callsite}" />
<column name="Level" layout="${level}" />
<column name="User" layout="${Identity}" />
<column name="Message" layout="${message}" />
</layout>
</target>
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="TraceLog" />
<logger name="*" minlevel="Error" writeTo="ErrorLog" />
</rules>
</nlog>