简介和安装

介绍

  1. 定义
    Log4net = Log for .NET,是 Apache Log4j(Java经典日志框架) 在.NET平台的官方移植版本,是一套成熟开源的日志记录类库。
  2. 核心作用
    引入项目后,无需从零编写文件读写逻辑,快速实现程序日志输出,用于记录运行信息、异常堆栈,方便调试与线上问题排查。
  3. 名词关系
  • Log4j:Java生态老牌日志组件
  • Log4net:适配C#/.NET的Log4j移植版

安装

现代.NET项目推荐优先使用NuGet安装

dotnet add package log4net

在Visual Studio中也可以直接在「管理NuGet程序包」搜索 log4net 一键安装。

log4net早期以dll手动下载引用为主,现在主流方案是NuGet。

Log4Net 环境搭建

log4net可以用于任何项目,不管是控制台,桌面还是web程序。

使用流程

步骤1:修改 Web.config,添加 log4net 配置
<?xml version="1.0"?>
<configuration>
  <configSections>
    <!-- 注册log4net配置节点 -->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>

  <log4net>
    <!-- 按日期滚动文件输出器 -->
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <!-- 日志存储路径,建议使用相对路径,不要写死U盘绝对路径 -->
      <param name="File" value="logs\\"/>
      <!-- 追加模式:true=持续追加日志,false=每次启动清空文件 -->
      <param name="AppendToFile" value="true"/>
      <!-- 最多保留日志文件数量 -->
      <param name="MaxSizeRollBackups" value="10"/>
      <!-- 是否固定文件名 false=按日期生成不同文件 -->
      <param name="StaticLogFileName" value="false"/>
      <!-- 文件命名格式 -->
      <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;"/>
      <!-- 滚动策略:Date=按日期分割日志 -->
      <param name="RollingStyle" value="Date"/>

      <!-- 日志输出格式模板 -->
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
        <!-- ❗原截图模板存在多余 %loggername,会造成日志尾部冗余文本,已清理 -->
      </layout>
    </appender>

    <!-- 根日志配置,全局生效 -->
    <root>
      <!-- 日志级别 all:输出所有等级;可选:DEBUG/INFO/WARN/ERROR/FATAL/OFF -->
      <level value="all"/>
      <!-- 绑定上面定义的日志输出器 -->
      <appender-ref ref="RollingLogFileAppender"/>
    </root>
  </log4net>
</configuration>Code language: HTML, XML (xml)
  1. 不要写死绝对路径 G:\xxx,部署到服务器会直接失效,改用 logs\\ 相对路径;
  2. 生产环境建议把 level 调整为 INFOERROR,避免大量DEBUG日志占用磁盘。
步骤2:全局初始化 Log4Net

在项目 Global.asaxApplication_Start 方法内添加初始化代码,程序启动时加载配置

protected void Application_Start(object sender, EventArgs e)
{
    // 初始化log4net,读取Web.config中的配置
    log4net.Config.XmlConfigurator.Configure();
}Code language: JavaScript (javascript)

注意:如果缺少这一行,代码调用日志不会生成任何文件,这是高频踩坑点。

步骤3:页面中获取Logger,打印日志

Default.aspx.cs 编写调用代码。可以是任何地方,例子演示其中一个页面。

using log4net;

public partial class _Default : System.Web.UI.Page
{
    // 获取日志实例,字符串为logger名称,可自定义
    public static readonly ILog log = LogManager.GetLogger("logger-name");

    protected void Page_Load(object sender, EventArgs e)
    {
        log.Info("普通日志");
        log.Error("错误日志");
        // 额外支持的级别
        // log.Debug("调试日志");
        // log.Warn("警告日志");
        // log.Fatal("致命错误日志");
    }
}

规范建议:将 ILog 定义为 static readonly,避免反复创建实例,优化性能。

运行效果说明

  1. 程序运行后,会自动在网站根目录生成 logs 文件夹;
  2. 自动生成命名格式 2026-08-04.log 的日志文件;
  3. 文件内输出内容示例:
2026-08-04 15:30:22,123 [6] INFO  logger-name - 普通日志
2026-08-04 15:30:22,129 [6] ERROR logger-name - 错误日志Code language: CSS (css)

补充

  • 除了输出文件,Log4Net还支持输出到控制台、数据库、邮件;
  • 新项目推荐对比 NLog / Serilog,对 .NET Core/.NET 5+ 支持更友好;Log4Net更多用于维护老旧WebForm、WinForms项目。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注