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

.NET 8中Log4Net仅记录ERROR/CRITICAL级别日志问题求助

问题分析与解决方案

1. .NET日志级别与Log4Net级别映射偏差

.NET 8的Microsoft.Extensions.Logging日志系统与Log4Net的级别默认映射可能存在问题,导致INFO、WARN级别的日志未被正确转发到Log4Net。

解决方法

在配置Log4Net日志提供者时,手动指定完整的级别映射关系:

using log4net.Core;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Log4Net.AspNetCore;

var builder = WebApplication.CreateBuilder(args);

// 清除默认日志提供者,避免干扰
builder.Logging.ClearProviders();
// 添加Log4Net并配置级别映射
builder.Logging.AddLog4Net(new Log4NetProviderOptions
{
    LogLevelOverrides = new Dictionary<LogLevel, Level>
    {
        { LogLevel.Trace, Level.Trace },
        { LogLevel.Debug, Level.Debug },
        { LogLevel.Information, Level.Info },
        { LogLevel.Warning, Level.Warn },
        { LogLevel.Error, Level.Error },
        { LogLevel.Critical, Level.Fatal },
        { LogLevel.None, Level.Off }
    }
});

2. Log4Net配置文件未正确加载

.NET 8中若log4net.config未设置为复制到输出目录,应用无法读取配置,会默认仅记录ERROR及以上级别日志。

解决方法

右键项目中的log4net.config文件 → 属性 → 复制到输出目录,选择如果较新则复制或始终复制。
若配置文件存放在子目录,可手动指定路径:

builder.Logging.AddLog4Net("Configs/log4net.config");

3. 验证包版本兼容性

确保使用适配.NET 8的Log4Net相关包:

  • 安装最新稳定版log4net(版本≥2.0.15)
  • ASP.NET Core应用需安装Microsoft.Extensions.Logging.Log4Net.AspNetCore(版本≥6.0.0,支持.NET 8)

4. 检查过滤器配置逻辑

你的配置中LevelRangeFilter设置了levelMin="INFO"、levelMax="FATAL",理论上应包含INFO、WARN、ERROR、FATAL级别日志。可临时注释过滤器测试:

<!-- 临时注释过滤器,验证是否能输出所有级别 -->
<!--
<filter type="log4net.Filter.LevelRangeFilter">
  <levelMin value="INFO" />
  <levelMax value="FATAL" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
-->

若移除后日志正常输出,再检查过滤器是否存在拼写错误(Log4Net的级别名称为INFO、WARN、ERROR、FATAL,无CRITICAL)。

5. 权限验证

确认应用运行身份对C:\AppPath\目录有读写权限(比如IIS应用池身份、控制台应用当前用户),虽然你能看到ERROR日志,但权限不足可能导致部分级别日志无法写入(概率较低,可作为排除项)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 12:07:29