web项目中的 log4net的配置

最近用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());

这样值日就记录在下来了。

原文地址:https://www.cnblogs.com/linzhao126/p/4271718.html