最近用log4net,网上查了很多资料,照着网上的配置大多都不管用,可能我还是有什么地方配置的不对。看出来的朋友平指出。下面是我自己亲测的,可以用!
1.web项目中的web.config 配置log4net
<?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 ASP.NET 应用程序的详细消息,请访问 http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <configSections> <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/> </configSections> <system.web> <compilation debug="true" targetFramework="4.0" /> </system.web> <log4net> <!--定义输出到文件中--> <appender name="LogFileAppender" type="log4net.Appender.FileAppender"> <!--定义文件存放位置:相对路径--> <!--<file value="./log/log.txt" />--> <!--定义文件存放位置:绝对路径--> <!--<file value="e:/log/log.text" />--> <!--定义文件存放位置:相对路径但是文件名称日期--> <file type="log4net.Util.PatternString" value="./log/%date{yyyy-MM-dd}.log" /> <appendToFile value="true" /> <!--得到--> <!--按照文件的大小进行变换日志文件--> <!--<param name="RollingStyle" value="Size" />--> <!--按照日期进行变换日志文件 下面两种配置都可以,作用是一样的--> <!--<param name="RollingStyle" value="Date" />--> <rollingStyle value="Date" /> <datePattern value="yyyyMMdd-HH:mm:ss" /> <!--关掉固定文件名--> <!--<staticLogFileName value="false" />--> <layout type="log4net.Layout.PatternLayout"> <!--每条日志末尾的文字说明 这个地方有时候管用--> <footer value="一条完整日志" /> <!--输出格式--> <!--样例:2008-03-26 13:42:32,111 [10] INFO loglog.WebForm1 [(null)] 文件:E: extlog4NetloglogloglogWebForm1.aspx.cs 行号:41 - info--> <conversionPattern value="%newline记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 文件:%F-- 行号:%L 错误描述:%message%newline" /> </layout> </appender> <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。--> <root> <!--文件形式记录日志--> <appender-ref ref="LogFileAppender" /> <!--Windows事件日志--> <!--<appender-ref ref="EventLogAppender" />--> <!-- 如果不启用相应的日志记录,可以通过这种方式注释掉 <appender-ref ref="AdoNetAppender_Access" /> --> </root> </log4net> </configuration>
关于使用log4net中可能会使用到的一些参数
%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
%n(new line):换行
%d(datetime):输出当前语句运行的时刻
%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
%t(thread id):当前语句所在的线程ID
%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
%c(class):当前日志对象的名称,例如:
%f(file):输出语句所在的文件名。
%l(line):输出语句所在的行号。
%数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充
<!--每条日志末尾的文字说明 这个地方有时候管用-->
<footer value="一条完整日志" />
有时候会有,有时候没有。??
2.配置完以后在Global文件中加点东西
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Security; using System.Web.SessionState; //方式1:这个可以用 //[assembly: log4net.Config.DOMConfigurator(ConfigFile = "Web.config", Watch = true)] namespace loglog { public class Global : System.Web.HttpApplication { protected void Application_Start(object sender, EventArgs e) { //方式2:网上有这样写的,我式了能用。有知道的请告诉我怎么用。 //log4net.Config.XmlConfigurator.Configure(); //方式3:这个可以用 log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(System.Web.HttpContext.Current.Server.MapPath("web.config"))); } protected void Session_Start(object sender, EventArgs e) { } protected void Application_BeginRequest(object sender, EventArgs e) { } protected void Application_AuthenticateRequest(object sender, EventArgs e) { } protected void Application_Error(object sender, EventArgs e) { } protected void Session_End(object sender, EventArgs e) { } protected void Application_End(object sender, EventArgs e) { } } }
上面的三种方式,第二种不管用,我看网上其他人有这样写的,不知道我这为什么不能用!!
3. 在想加日志的的地方加下面的代码
//创建日志记录组件实例 ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); //记录错误日志 log.Error("error", new Exception("发生了一个异常")); //记录严重错误 log.Fatal("fatal", new Exception("发生了一个致命错误")); //记录一般信息 log.Info("info"); //记录调试信息 log.Debug("debug"); //记录警告信息 log.Warn("warn"); //Console.WriteLine("日志记录完毕。"); //Console.Read(); System.Diagnostics.Debug.WriteLine("线程id:" + Thread.CurrentThread.ToString());
这样值日就记录在下来了。