介绍
- 定义
Log4net = Log for .NET,是 Apache Log4j(Java经典日志框架) 在.NET平台的官方移植版本,是一套成熟开源的日志记录类库。 - 核心作用
引入项目后,无需从零编写文件读写逻辑,快速实现程序日志输出,用于记录运行信息、异常堆栈,方便调试与线上问题排查。 - 名词关系
- 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".log""/>
<!-- 滚动策略: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)
- 不要写死绝对路径
G:\xxx,部署到服务器会直接失效,改用logs\\相对路径; - 生产环境建议把
level调整为INFO或ERROR,避免大量DEBUG日志占用磁盘。
步骤2:全局初始化 Log4Net
在项目 Global.asax 的 Application_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,避免反复创建实例,优化性能。
运行效果说明
- 程序运行后,会自动在网站根目录生成
logs文件夹; - 自动生成命名格式
2026-08-04.log的日志文件; - 文件内输出内容示例:
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项目。
Next: 日志写入数据库