.net mvc配置log4net记录日志
先添加log4net.dll引用 通过NuGet来引入
先配置log4net 需要的配置文件,新建一个CfgFiles文件夹,添加一个web配置文件,该名为log4net.config 顺便在添加个Log文件夹用来放日志
log4net.config 内容如下
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<!--OFF>FATAL>ERROR>WARN>INFO>DEBUG,ALL-->
<root>
<level value="ALL"/>
<!--文件形式记录日志-->
<appender-ref ref="SysAppender"/>
</root>
<logger name="WebLogger">
<!--文件形式记录日志-->
<level value="DEBUUG"/>
</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="DatePatten" 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>
完成后在AssemblyInfo.cs文件里添加 [assembly:log4net.Config.XmlConfigurator(ConfigFile = @"CfgFiles/Log4net.config",ConfigFileExtension ="config",Watch =true)]
PS:因为日志存在并发问题,所以通过队列的方式来记录日志
我们在添加一个MyErrorAttribute.cs 用来处理异常并记录日志 它继承全局异常类HandleErrorAttribute
public class MyErrorAttribute:HandleErrorAttribute { private static ILog log = LogManager.GetLogger(typeof(MyErrorAttribute)); public static Queue<Exception> exceptions = new Queue<Exception>(); public override void OnException(ExceptionContext filterContext) { exceptions.Enqueue(filterContext.Exception);
///出现异常,这里可以让系统跳转的友好页面 base.OnException(filterContext); } }
完成后,在FilterConfig类中修改系统默认的
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { //filters.Add(new HandleErrorAttribute()); filters.Add(new MyErrorAttribute());//我们自己定义的 }
然后在全局文件Global中的Start()方法添加
ThreadPool.QueueUserWorkItem(o=> { while (true) { if (MyErrorAttribute.exceptions.Count > 0) { Exception ex = MyErrorAttribute.exceptions.Dequeue(); if (ex!=null) { ILog log = LogManager.GetLogger("Error"); log.Error(ex.ToString()); } else { Thread.Sleep(50); } } else { Thread.Sleep(50); } } });
这样我们的日志基本完成,测试一下
Action中引发一个异常
public ActionResult About() { ViewBag.Message = "Your application description page."; int a = 0; int x = 1, y = 0; a = x / y; return View(); }
访问一下About 后在Log文件夹下找日志文件



浙公网安备 33010602011771号