相同的记录器用于登录多个目的地

本文关键字:目的地 登录 用于 记录器 | 更新日期: 2023-09-27 18:15:11

我怎么能有一个记录器,我得到与GetLogger()方法,记录到文件和富文本框在同一时间?

相同的记录器用于登录多个目的地

一种方法是使用IoC容器。只需定义一个接口,然后根据该接口定义记录器类。然后可以根据需要创建它们或将它们注入到其他类中。

您的nlog配置定义了彼此独立的规则和目标。您的要求是有2个目标,一个文件记录器和一些其他记录器显示您的日志条目在一个文本框中。您只需在nlog配置中添加两条规则,将日志条目定向到这两个目标。

这是一个示例nlog。将所有日志记录项记录到两个不同目标的配置。您可以为各个日志规则设置不同的"最小级别"。第一个目标是一个简单的文件记录器,另一个目标是一个MethodCall目标,它调用一个带有日志参数的静态方法。请参阅nlog文档了解所有可用的目标和进一步的文档。

 <?xml version="1.0" encoding="utf-8" ?>
 <configuration>
   <configSections>
     <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
  </configSections>
  <nlog>
    <targets>
      <target name="toFile" type="File" 
          layout="${longdate} ${level} [${threadid}] - ${callsite}: ${message} ${onexception:${newline}Ausnahme':${exception:format=tostring}}" 
          fileName="${basedir}/log.txt"
          archiveFileName="${basedir}/log.{#####}.txt"
          archiveAboveSize="1024000"
          archiveNumbering="Sequence"
          concurrentWrites="true"
          keepFileOpen="false"
          maxArchiveFiles="3"
          />
      <target xsi:type="MethodCall"
         name="toRichTextBox"
         methodName="String"
         className="String">
         <parameter layout="Layout" name="String" type="System.Type"/><!-- repeated -->
      </target>
    </targets>
    <rules>
      <logger name="*" minlevel="Warn" writeTo="toFile" />
      <logger name="*" minlevel="Warn" writeTo="toRichTextBox" />
    </rules>
  </nlog>
 </configuration>