log4net简介:
log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台、文件、数据库等)的工具。log4net记录日志的功能非常强大。它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。下面介绍如何在Visual Studio2013中使用log4net快速创建系统日志,如何扩展以输出自定义字段。
1.新建log4net_test_01控制台应用程序>右击项目>管理NuGet程序包>输入log4>安装Apache log4net
2.在项目中添加log4net.config文件,设置文件属性复制到输出目录为始终复制,在里面添加配置项如下:
<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> </configSections> <log4net> <!--记录正常日志--> <logger name="logerror"> <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) --> <level value="ALL" /> <appender-ref ref="ErrorAppender" /> </logger> <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender"> <!--日志路径--> <param name="File" value="./App_Log/Info/InfoLog.log" /> <!--是否是向文件中追加日志--> <param name="AppendToFile" value="true" /> <!--log保留天数--> <param name="MaxSizeRollBackups" value="100" /> <!--log单个文件最大--> <param name="MaximumFileSize" value="1MB" /> <!--日志根据大小滚动--> <param name="RollingStyle" value="Size" /> <!--日志文件名是否是固定不变的--> <param name="StaticLogFileName" value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%-5p %d [%c] %m%n" /> </layout> </appender> <!--记录异常日志--> <logger name="loginfo"> <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) --> <level value="ALL" /> <appender-ref ref="InfoAppender" /> </logger> <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"> <!--日志路径--> <param name="File" value="./App_Log/Error/ErrorLog.log" /> <!--是否是向文件中追加日志--> <param name="AppendToFile" value="true" /> <!--log保留天数--> <param name="MaxSizeRollBackups" value="100" /> <!--log单个文件最大--> <param name="MaximumFileSize" value="1MB" /> <!--日志根据大小滚动--> <param name="RollingStyle" value="Size" /> <!--日志文件名是否是固定不变的--> <param name="StaticLogFileName" value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%-5p %d [%c] %m%n" /> </layout> </appender> </log4net></configuration>3.应用:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using log4net;using log4net.Config;namespace log4net_test_01{ class PRogram { public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo"); public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror"); static void Main(string[] args) { InitLog4Net(); if (loginfo.IsInfoEnabled) { loginfo.Info("写正常运行日志"); } if (logerror.IsInfoEnabled) { logerror.Error("发生异常",new Exception("这里发生了异常")); } Console.ReadLine(); } static void InitLog4Net() { XmlConfigurator.Configure(new System.IO.FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config")); Console.WriteLine("加载成功Log4Net成功"); } }}4.运行后检查程序目录中多出了App_Log文件夹,并且里面有Error和Info文件夹,存放着记录的日子文件。5.在MVC项目中使用log4net记录日子方法也是一样,先添加引用弄log4net库文件,然后添加log4net.config配置文件,区别在于读取配置初始化在Global.asax中的application_Start()方法内完成,注意log4net.config文件属性复制到输出目录为始终复制:
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using System.Web.Routing;using log4net.Config;namespace log4net_test02{ public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); //自动配置基于应用程序的配置设置log4net系统 XmlConfigurator.Configure(new System.IO.FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config")); } }}6.记录日志的方法同上:using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;namespace log4net_test02.Controllers{ public class HomeController : Controller { // // GET: /Home/ public ActionResult Index() { Write("记录普通日志"); Write("记录错误日志",new Exception("自定义异常")); return Content("在web mvc 中使用 log4net"); } public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo"); public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror"); /// <summary> /// 普通的文件记录日志 /// </summary> /// <param name="info"></param> private static void Write(string info) { if (loginfo.IsInfoEnabled) { loginfo.Info(info); } } /// <summary> /// 错误日志 /// </summary> /// <param name="info"></param> /// <param name="se"></param> private static void Write(string info, Exception se) { if (logerror.IsErrorEnabled) { logerror.Error(info, se); } } }}注:这里记录普通日志和记录错误日志的对象和方法没有独立出来,在实际项目开发中应该进行封装起来统一使用。
新闻热点
疑难解答