项目里都会用到日志记录..特别是在本地跑的欢畅..一上服务器就嗝屁的时候..日志会帮你大忙..
Log4net算是一种应用的最广泛的日志记录方式了..下面来简略的说下他的用法..
先下载log4net.dll [下载] 并引用
然后在配置文件里写入一些配置的节值..
下边是我的..
<log4net> <appender name="LogsFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="logs/running.txt"/> <appendToFile value="true"/> <encoding value="UTF-8"/> <rollingStyle value="Date"/> <datePattern value=".yyyyMMdd"/> <maxSizeRollBackups value="10" /> <maximumFileSize value="5MB" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/> </layout> </appender> <root> <level value="ALL"/> <appender-ref ref="LogsFileAppender"/> </root> </log4net>
因为一般日志都是记录到文件了..所以上边的配置还是最多的..
如果你想加入到数据库..那就要按照下边的写法..
<log4net> <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> <bufferSize value="1"/> <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> <connectionString value="data source=192.168.100.100;initial catalog=DBName;integrated security=false;persist security info=True;User ID=sa;Password=123"/> <commandText value="INSERT INTO Log (Date, Thread, Level, Logger, Message, Exception, LogApp) VALUES (@Date, @Thread, @Level, @Logger, @Message, @Exception,'Web')"/> <parameter> <parameterName value="@Date"/> <dbType value="DateTime"/> <layout type="log4net.Layout.RawTimeStampLayout"/> </parameter> <parameter> <parameterName value="@Thread"/> <dbType value="String"/> <size value="255"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%thread"/> </layout> </parameter> <parameter> <parameterName value="@Level"/> <dbType value="String"/> <size value="50"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%level"/> </layout> </parameter> <parameter> <parameterName value="@Logger"/> <dbType value="String"/> <size value="255"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%logger"/> </layout> </parameter> <parameter> <parameterName value="@Message"/> <dbType value="String"/> <size value="4000"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%Message"/> </layout> </parameter> <parameter> <parameterName value="@Exception"/> <dbType value="String"/> <size value="2000"/> <layout type="log4net.Layout.ExceptionLayout"/> </parameter> </appender> <root> <level value="ALL"/> <appender-ref ref="AdoNetAppender"/>
</root>
</log4net>
这里边需要先把表建立起来..插入数据库的T-SQL语句也已经在里边配置过了..相信大家可以根据这个语句来建表了..所以具体的建表语句就不写了..
需要说下的是..在上文配置中的最后一个节点..<root> 这里边的节点 level..我配置的是All..就是说所有级别都是写在这里边的..没有区分的特别清楚..大家有兴趣了可以深入研究一下..
然后在程序开始初期..配置这么一句话..来初始化Log4net
log4net.Config.XmlConfigurator.Configure();
Web程序配置到 Global.asax中..
// Note: For instructions on enabling IIS6 or IIS7 classic mode, // visit http://go.microsoft.com/?LinkId=9394801 public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { log4net.Config.XmlConfigurator.Configure(); ModelBinders.Binders[typeof(DataTable)] = new DataTableModelBinder(); AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); } }
WinFrom或者WindowService程序中配置到Program.cs中..
static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> static void Main() { log4net.Config.XmlConfigurator.Configure(); ServiceBase[] ServicesToRun = new ServiceBase[] { new Hello() }; ServiceBase.Run(ServicesToRun); } }
在你页面中 要用的时候..需要定义Log对象了..
log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); public Service1() { InitializeComponent(); } protected override void OnStart(string[] args) { log.Info("服务成功启动了!!"); } protected override void OnStop() { log.Info("服务被关闭了!!"); } }
上边是我的用法..大家也可以直接使用
log4net.ILog log = log4net.LogManager.GetLogger("LogsFileAppender");
括号中的值是你在配置文件中配置的那个 appender name..
剩下的就是使用了..Log4net的日志级别分为五类..
从最严重到最轻依次为:
Fatal 毁灭
Error 异常
Warn 警告
Debug 调试
Info 普通信息
可以直接使用上边命名对象 Log 的同名方法来记录日志..
另外再说一点是配置文件中的文件书写方式..
其中layout节点的配置说明: %m(message):输出的日志消息; %n(newline):换行; %d(datetime):输出当前语句运行的时刻; %r(runtime):输出程序从运行到执行到当前语句时消耗的毫秒数; %t(threadid):当前语句所在的线程ID ; %p(priority): 日志的当前日志级别; %c(class):当前日志对象的名称; %L:输出语句所在的行号; %F:输出语句所在的文件名; %-10:表示最小长度为10,如果不够,则用空格填充;
Over....