ASP.NET Boilerplate 使用 Log4Net 和 Castle Logging 添加额外的日志文件

ASP.NET Boilerplate adding an additional log file with Log4Net and Castle Logging

我一直在尝试查找有关如何在 ASP.NET 样板 MVC 中使用单独日志文件的文档和指南。

直接将 ILogger 注入并将消息推送到默认 Log.txt 文件中,但是我需要一个单独的日志文件来记录大量批处理作业消息并保持整洁。

我找不到任何方法来使用 Log4Net.config 文件中的另一个日志。谁能建议正确的代码/配置?

方式一:

在此示例中,默认日志文件为 App_Data/Logs/Logs.txt

但是当我在命名空间 MySite.Web.Controllers.PaymentController 中使用记录器时,日志将写入 App_Data/Logs/PaymentLogs.txt

log4net.config

<?xml version="1.0" encoding="utf-8" ?>
<log4net>

  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" >
    <file value="App_Data/Logs/Logs.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="10000KB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-5level %date [%-5.5thread] %-40.40logger - %message%newline" />
    </layout>
  </appender>

  <appender name="RollingFileAppender_PaymentController" type="log4net.Appender.RollingFileAppender" >
    <file value="App_Data/Logs/PaymentLogs.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="32" />
    <maximumFileSize value="10000KB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-5level %date [%-5.5thread] %-40.40logger - %message%newline" />
    </layout>
  </appender>

  <root>
    <appender-ref ref="RollingFileAppender" />
    <level value="DEBUG" />
  </root>

  <logger name="NHibernate">
    <level value="WARN" />
  </logger>

  <logger name="MySite.Web.Controllers.PaymentController" additivity="false">
    <appender-ref ref="RollingFileAppender_PaymentController" />
    <level value="DEBUG" />
  </logger>

</log4net>

方式二:

您可以通过使用附加程序名称调用 LogManager.GetLogger() 来获取特定的记录器。

private static readonly ILog paymentLogger = LogManager.GetLogger("MySite.Web.Controllers.PaymentController");

所以我在查看 Hangfire 文档时偶然找到了答案,其中显示您可以通过让 Log4Net 侦听 Hangfire 名称和路由来配置 Hangfire 消息以发送到另一个日志文件。

通过 Log4Net.config 中的以下附加配置,我现在可以将在 MyClass 中正常创建的日志消息发送到 MyClass.txt 日志文件:

<appender name="RollingFileAppender_MyClass" type="log4net.Appender.RollingFileAppender" >
  <file value="App_Data/Logs/MyClass.txt" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="32" />
  <maximumFileSize value="10000KB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%-5level %date [%-5.5thread] %-40.40logger - %message%newline" />
  </layout>
</appender>

<logger additivity="false" name="MyNamespace.MyClass">
  <level value="DEBUG" />
  <appender-ref ref="RollingFileAppender_MyClass" />
</logger>

为了完整起见,它以 AspNet Boilerplate 文档中记录的标准方式调用:

https://aspnetboilerplate.com/Pages/Documents/Logging