MVC - 19.Log4net
下载地址:http://pan.baidu.com/s/1gdxQegN
对于网站来讲,我们不能将异常信息显示给用户, Log4Net用来记录日志,可以将程序运行过程中的信息输出到文件,数据库中等地方,可以通过日志查看系统的运行过程,发现系统的问题。log4net的使用步骤如下:
1.添加对log4net.dll的引用。
2.在配置文件中添加配置。如下是在web.config的配置:
在configSections下节点配置为:
<configuration> <configSections> <!--日志的配置--> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4Net"/> </configSections> <!--日志的配置开始--> <log4net> <root> <level value="ALL"/> <appender-ref ref="SysAppender"/> </root> <logger name="WebLogger"> <!--配置日志的级别,低于此级别的就不写到日志里面去--> <level value="DEBUG"/> </logger> <appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net" > <param name="File" value="Log/" /> <param name="AppendToFile" value="true" /> <param name="RollingStyle" value="Date" /> <param name="DatePattern" value=""Logs_"yyyyMMdd".txt"" /> <param name="StaticLogFileName" value="false" /> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /> <param name="Header" value=" ----------------------header-------------------------- " /> <param name="Footer" value=" ----------------------footer-------------------------- " /> </layout> </appender> <appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net"> <!--日志的格式--> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /> </layout> </appender> </log4net> <!--日志的配置结束—>
Appender:可以将日志输出到不同的地方,不同的输出目标对应不同的Appender:RollingFileAppender(滚动文件),
AdoNetAppender(数据库), SmtpAppender (邮件)等。
level(级别):标识这条日志信息的重要级别。None>Fatal>ERROR>WARN>DEBUG>INFO>ALL,设定一个Level,那么低于
这个 Level的日志是不会被写到Appender中的。
3.我们可以写一个类,定义一个静态方法,这个方法将可以将我们的错误消息进行输出。因为不仅仅一个地方需要,所以我们把它定义为了静态方法。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using RBW.Common; namespace RBWeb.Filter { public class MyExceptionFileAttribute : HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { base.OnException(filterContext); //处理错误消息,将其跳转到一个页面 LogHelper log = LogFactory.GetLogger(filterContext.Exception.ToString()); log.Error(filterContext.Exception.ToString()); //页面跳转到错误页面 //filterContext.HttpContext.Response.Redirect("/Error.html"); } } }
4.定义一个辅助类
LogHelper.cs
LogHelper.cs using System; using log4net; namespace RBW.Common { public class LogHelper { private ILog logger; public LogHelper(ILog log) { this.logger = log; } //记录一般信息 public void Info(object message) { this.logger.Info(message); } public void Info(object message, Exception e) { this.logger.Info(message, e); } //记录调试信息 public void Debug(object message) { this.logger.Debug(message); } public void Debug(object message, Exception e) { this.logger.Debug(message, e); } //记录警告信息 public void Warning(object message) { this.logger.Warn(message); } public void Warning(object message, Exception e) { this.logger.Warn(message, e); } //记录错误日志 public void Error(object message) { this.logger.Error(message); } public void Error(object message, Exception e) { this.logger.Error(message, e); } //记录严重错误 public void Fatal(object message) { this.logger.Fatal(message); } public void Fatal(object message, Exception e) { this.logger.Fatal(message, e); } } public class LogFactory { static LogFactory() { } public static LogHelper GetLogger(Type type) { return new LogHelper(LogManager.GetLogger(type)); } public static LogHelper GetLogger(string str) { return new LogHelper(LogManager.GetLogger(str)); } } }
5.MVC为我们提供了一种全局过滤机制,其中有一种过滤器叫做异常过滤器,当项目中出现异常的时候执行异常处理器中的代码。
为了做到不修改源代码,我们可以自定义一个类,使这个类继承自HandleErrorAttribute这个类,并重写其内部方法。这个方法内部代码的作用就是处理异常,将异常信息记录日志,让当前请求跳转到错误页面。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using RBW.Common; namespace RBWeb.Filter { public class MyExceptionFileAttribute : HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { base.OnException(filterContext); //处理错误消息,将其跳转到一个页面 LogHelper log = LogFactory.GetLogger(filterContext.Exception.ToString()); log.Error(filterContext.Exception.ToString()); //页面跳转到错误页面 //filterContext.HttpContext.Response.Redirect("/Error.html"); } } }
6.在程序一开始的时候,我们需要在Global.asax.cs文件中的Application_Start事件中进行一下初始化配置。
public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { //注册区域路由 AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); //读取日志 如果使用log4net,应用程序一开始的时候,都要进行初始化配置 log4net.Config.XmlConfigurator.Configure(); GlobalFilters.Filters.Add(new RBWeb.Filter.MyExceptionFileAttribute()); } }
作者:【唐】三三
出处:https://www.cnblogs.com/tangge/p/4239511.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具