You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过log4net将特定类型日志输出至独立日志文件?

支持,具体配置修改如下

log4net完全支持这种按特定日志记录器(对应类型)输出到独立文件的需求,你只需要在现有配置基础上新增专属的Appender和Logger节点即可:

步骤1:新增专属Appender

在<log4net>节点下添加一个新的RollingFileAppender,指定输出到目标日志文件:

<appender name="ExceptionHandlingAppender" type="log4net.Appender.RollingFileAppender">
  <file value="logs\WebPortal.ExceptionHandlingMiddleware.log" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="1MB" />
  <staticLogFileName value="true" />
  <threshold value="ALL" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger{2} - %message%newline" />
  </layout>
</appender>

步骤2:新增专属Logger节点

在<root>节点同级添加logger节点,指定与ExceptionHandlingMiddleware类型匹配的名称(需包含完整命名空间,比如YourNamespace.ExceptionHandlingMiddleware),关联上面的专属Appender,并设置additivity="false"避免日志重复输出到通用文件:

<logger name="YourNamespace.ExceptionHandlingMiddleware" additivity="false">
  <level value="ALL" />
  <appender-ref ref="ExceptionHandlingAppender" />
</logger>

注意:name必须和LogManager.GetLogger(typeof(ExceptionHandlingMiddleware))返回的日志记录器名称一致,默认是该类型的完整限定名,不确定的话可以通过log.Logger.Name输出查看。

完整配置示例

修改后的完整配置如下:

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

<configuration>
  <log4net>
    <root>
      <level value="ALL" />
      <appender-ref ref="RollingFileAppender" />
    </root>
    <!-- 原有通用日志Appender -->
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="logs\WebPortal.API.log" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="1MB" />
      <staticLogFileName value="true" />
      <threshold value="ALL" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger{2} - %message%newline" />
      </layout>
    </appender>
    <!-- 异常中间件专属日志Appender -->
    <appender name="ExceptionHandlingAppender" type="log4net.Appender.RollingFileAppender">
      <file value="logs\WebPortal.ExceptionHandlingMiddleware.log" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="1MB" />
      <staticLogFileName value="true" />
      <threshold value="ALL" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger{2} - %message%newline" />
      </layout>
    </appender>
    <!-- 异常中间件专属Logger -->
    <logger name="YourNamespace.ExceptionHandlingMiddleware" additivity="false">
      <level value="ALL" />
      <appender-ref ref="ExceptionHandlingAppender" />
    </logger>
  </log4net>
</configuration>

验证使用

你的日志记录器初始化代码保持不变:

static readonly ILog log = LogManager.GetLogger(typeof(ExceptionHandlingMiddleware));

此时通过这个log输出的所有日志都会单独写入logs\WebPortal.ExceptionHandlingMiddleware.log,不会再出现在通用的WebPortal.API.log中(additivity="false"阻止了日志向上传递到root logger)。

内容的提问来源于stack exchange,提问作者BennoDual

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 16:30:04