如何使用ASP.NET 2.0及更高版本配置Log4net(带视频)?
如何使用ASP.NET 2.0及更高版本配置Log4net(带视频)?
Log4Net如何使用的视频链接: 如何使用视频链接[^]
- 以前在本地机器上运行正常,但在部署到生产环境后,总是会跳转到错误页面!
- 但经过生产环境的一些修改后,在进入数据库时,会跳转到错误页面。
- 想显示用户友好的消息,而不是给用户看异常信息!但想将异常外部存储起来。
解决方案是 Log4Net。
最终产品 :

图片:日志文件
简介:
log4net 是一个帮助程序员将日志语句输出到各种输出目标的工具。在应用程序出现问题时,启用日志记录有助于定位问题。使用 log4net 可以在不修改应用程序二进制文件的情况下,在运行时启用日志记录。log4net 软件包的设计宗旨是,日志语句可以保留在已发行的代码中,而不会带来很高的性能开销。因此,日志记录的速度(或者说不记录的速度)至关重要。同时,日志输出可能非常庞大,以至于很快就会让人不知所措。log4net 的一个显著特点是分层日志记录器的概念。使用这些日志记录器,可以以任意粒度选择性地控制输出哪些日志语句。
log4net 的设计有两个明确的目标:
速度和灵活性
特点
- 支持多种框架
- 输出到多个日志记录目标
- 分层日志记录架构
- XML 配置
- 动态配置
- 日志记录上下文
- 成熟的架构
- 模块化和可扩展的设计
- 高性能与灵活性
XML 配置
log4net 使用 XML 配置文件进行配置。配置信息可以嵌入到其他 XML 配置文件中(例如应用程序的 .config 文件)或单独的文件中。该配置易于阅读和更新,同时保留了表达所有配置的灵活性。或者,log4net 也可以通过编程方式进行配置。
动态配置
log4net 可以监视其配置文件中的更改,并动态应用配置器所做的更改。日志级别、Appender、Layout 以及几乎所有其他内容都可以在运行时进行调整。在许多情况下,可以在不终止进程的情况下诊断应用程序问题。这对于调查已部署应用程序的问题可能是一个非常有价值的工具。
如何配置 Log4Net FileAppender: 将日志事件追加到文件中。
开始
运行
Devenv //启动 VisualStudio 开发环境
文件
新建网站 <-
模板:Asp.Net网站
位置: Http https:///Log4netDemo
语言:VisualC#
确定<--
将以下行添加到 Web.config 文件。这将添加自定义配置节。要了解有关 自定义配置 的更多信息
<section name="log4net "type="log4net.Config.Log4NetConfigurationSectionHandler, log4net">
添加自定义配置节
图片:1
现在,在 Web.configFile 中添加 Appender 配置,如下图所示。
Appender 区块图片:2
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<!-- Please make shure the ..\\Logs directory exists! -->
<param name="File" value="Logs\\Log4Net.log"/>
<!--<param name="AppendToFile" value="true"/>-->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/>
</layout>
</appender>
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<to value=""/>
<from value=""/>
<subject value=""/>
<smtpHost value=""/>
<bufferSize value="512"/>
<lossy value="true"/>
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="WARN"/>
</evaluator>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern
value="%newline%date [%thread] %-5level %logger [%property] - %message%newline%newline%newline"/>
</layout>
</appender>
<logger name="File">
<level value="All"/>
<appender-ref ref="LogFileAppender"/>
</logger>
<logger name="EmailLog">
<level value="All"/>
<appender-ref ref="SmtpAppender"/>
</logger>
</log4net>
Appender 区块的 XML 代码
有关 File Appender
的更多信息
关于 File Appender
将日志事件发送到由 File 属性指定的日志文件中。可以通过指定 AppendToFile 属性以追加或覆盖模式打开日志文件。如果文件路径是相对路径,则相对于应用程序基目录。可以通过设置 Encoding 属性来指定文件编码。Layout 的 Header 和 Footer 值将在每次打开和关闭文件时分别写入。如果 AppendToFile 属性为 true,则日志文件可能包含多个 Header 和 Footer 的副本。此 Appender 将在调用 ActivateOptions 时尝试打开日志文件进行写入。这通常发生在配置期间。如果无法打开日志文件进行写入,则 Appender 将在每次记录消息时尝试再次打开日志文件。如果记录消息时无法打开日志文件进行写入,则该消息将被此 Appender 丢弃。
FileAppender 通过 Locking Model 属性支持可插拔的文件锁定模型。默认行为,由 FileAppender.ExclusiveLock 实现,是在 Appender 关闭之前获取对日志文件的独占写入锁。替代模型 FileAppender.MinimalLock 仅在 Appender 写入日志事件时持有写入锁。
Global.asax 文件
Global.asax 文件,也称为 ASP.NET 应用程序文件,是一个可选文件,其中包含响应 ASP.NET 或 HttpModules 引发的应用程序级别事件的代码。Global.asax 文件位于基于 ASP.NET 的应用程序的根目录中。在运行时,Global.asax 会被解析并编译成一个从 HttpApplication 基类派生的动态生成的 .NET Framework 类。Global.asax 文件本身被配置为自动拒绝对其的任何直接 URL 请求;外部用户无法下载或查看其中编写的代码。
添加 Global.asax 文件
Alt+Ctrl+L (打开解决方案资源管理器)
AddNewItem
GlobalApplicationClass
AddNewItem
GlobalApplicationClass
名称:Global.asax
语言:VisualC#
添加<-
向网站添加 Global.asax 文件。
添加 Global.asax 文件图片:3
现在,按照下图所示添加 Log4net Dll 的引用。
Alt+Ctrl+L (打开解决方案资源管理器)
AddReference
Browse(浏览并选择 dll)
确定<-
添加 Log4Net 引用图片:4
在 Application_Start 事件中添加以下行,如下所示。
添加 XmlConfigurator 图片:5
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
log4net.Config.XmlConfigurator.Configure();
}
以上行指示 XmlConfigurator 解析配置文件并据此设置日志记录。配置文件的路径在命令行上指定。
Application_Start 事件:应用程序启动时运行的代码
现在,在 Default.aspx 的 Page_Load 事件中添加以下代码。
//Typer of messages Which Log4net Supports..!
log4net.ILog logger = log4net.LogManager.GetLogger("File");
logger.Info("This is For Info Message");
logger.Warn("This is For Warn Message");
logger.Error("This is For Error Message");
logger.Debug("this is for Debug Message");
Default.aspx.cs 中的代码图片:6
ILog :
ILog 属性 :
![]() | 检查此日志记录器是否启用了 Debug 级别。 |
![]() | 检查此日志记录器是否启用了 Error 级别。 |
![]() | 检查此日志记录器是否启用了 Fatal 级别。 |
![]() | 检查此日志记录器是否启用了 Info 级别。 |
![]() | 检查此日志记录器是否启用了 Warn 级别。 |
ILog 的公共实例方法:
![]() | 重载。使用 Debug 级别记录消息对象。 |
![]() | 重载。使用 Debug 级别记录格式化字符串。 |
![]() | 重载。使用 Error 级别记录消息对象。 |
![]() | 重载。使用 Error 级别记录格式化消息字符串。 |
![]() | 重载。使用 Fatal 级别记录消息对象。 |
![]() | 重载。使用 Fatal 级别记录格式化消息字符串。 |
![]() | 重载。使用 Info 级别记录消息对象。 |
![]() | 重载。使用 Info 级别记录格式化消息字符串。 |
![]() | 重载。使用 Warn 级别记录消息对象。 |
![]() | 重载。使用 Warn 级别记录格式化消息字符串。 |
LogManager
此类具有客户端用于请求日志记录器实例的静态方法。GetLogger 方法用于检索日志记录器。有关 LogManager 的更多信息
有很多种方法可以实现 log4net!有关 Log4net 类型 的更多信息
现在运行文件,您将在解决方案资源管理器中看到一个名为 Logs 的新文件夹,如下所示。
解决方案资源管理器中的 Logs 文件夹图片:7
注意
如果仍然无法工作,请检查网站的 IIs 设置。确保您已为 Logs 文件夹授予了写入权限。
附加功能(可选):
您可以使用 Global.asax
文件中的 Application_Error
来记录服务器的最后一个错误到日志文件中。
void Application_Error(object sender, EventArgs e)
{
log4net.ILog logger = log4net.LogManager.GetLogger("File");
string error = Server.GetLastError().GetBaseException().ToString();
logger.Error(error);
}
总结 :
参考和进一步研究 :
- 更新于 2009 年 10 月 14 日