asp.net 使用log4net-使用单独的log4net类

      一直以来,都是把log4net写有应用程序中,在每个需要输出日志的类中都先声明一下,然后再调用它的输出函数,如debug,error等等,这样也没有感觉出有多大的不方便,直到有一次,在每个输出日志的地方需要加一个写到库中的语句,就是把错误级别的日志在输出到文件的同时也写到专门的数据库中,以方便管理与查看,这样一来可把我们给害惨了,这么多error级别的日志,得花费多少时间去添加呀。

    一个同事在输出日志的时候写了一个公共方法,所有输出日志的地方都调用这个方法,在这次的添加过程中,他只需要在这个方法中添加一句话就完成了所需的功能。这样太方便了,能不能把输出日志写成单独一个类,然后在应用程序中调用这个类的dll呢?由于时间原因,一直没能去作实验,在新项目中我想用这个方法去实现日志输出,于是作了这个实验,记录下来,请高人指教,同时了也是作为一个备份,以便自己以后查看吧。

     以下是实现的正文:

1、新建一个解决方案,取名为AloneLog

2、添加一个类库工程,取名为Log.Class

     2.1 为Log.Class工程引用log4net.dll;

     2.2 为Log.Class工程添加log4net.dll的引用;

     2.3在AssemblyInfo.cs文件的最后添加:

     [assembly: log4net.Config.XmlConfigurator(ConfigFile = "web.config", Watch = true)]

    2.4 为Log.Class工程添加一个输出日志的类文件LogOut.cs,其内容如下:

 

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AloneLog
{
    public class LogOut
    {
        public static void debug(string message)
        {
            log4net.ILog log = log4net.LogManager.GetLogger("LogOut");
            if (log.IsDebugEnabled)
            {
                log.Debug(message);
            }
            log = null;
        }

        public static void error(string message)
        {
            log4net.ILog log = log4net.LogManager.GetLogger("LogOut");
            if (log.IsErrorEnabled)
            {
                log.Error(message);
            }
            log = null;
        }

        public static void fatal(string message)
        {

            log4net.ILog log = log4net.LogManager.GetLogger("LogOut");
            if (log.IsFatalEnabled)
            {
                log.Fatal(message);
            }
            log = null;
        }
        public static void info(string message)
        {
            log4net.ILog log = log4net.LogManager.GetLogger("LogOut");
            if (log.IsInfoEnabled)
            {
                log.Info(message);
            }
            log = null;
        }

        public static void warn(string message)
        {
            log4net.ILog log = log4net.LogManager.GetLogger("LogOut");
            if (log.IsWarnEnabled)
            {
                log.Warn(message);
            }
            log = null;
        }
    }
}

   2.5 编译Log.Class类库工程。

3、添加一个web 应用程序,取名为Log.Web。

    3.1 为Log.Web应用程序引入Log.Class工程bin目录下的Log.Class.dll;

   3.2 在web 应用程序Log.Web的配置文件web.config文件中添加log4net的配置:

   <?xml version="1.0"?>
<configuration>
 <configSections>
  <sectionGroup >

........
  </sectionGroup>

 

    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />

 

  </configSections>


 <appSettings/>
 <connectionStrings/>

 

  <log4net>
    <root>
      <!--
   <level value="ALL" />
   <appender-ref ref="rootFile" />
   -->
    </root>
    <logger name="LogWebEdu">
      <level value="DEBUG" />
      <appender-ref ref="rollingFile" />
    </logger>
    <appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
      <param name="File" type="" value="log/log.txt" />
      <param name="AppendToFile" value="true" />
      <param name="RollingStyle" value="Date" />
      <param name="DatePattern" value="yyyyMMdd" />
      <param name="StaticLogFileName" value="true" />
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%n%d %r [%t] %-5p %c %L - %m%n" />
      </layout>
    </appender>
  </log4net>


  <system.web>

......
 </system.web>
</configuration>

 

    3.2 在需要输出日志的文件里(在此为default.aspx.cs)调用输出日志的方法,代码如下:

  using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Log.Class;

 

namespace Log.Web
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                LogOut.debug("单独日志类测试");
            }

        }
    }
}

 

除此之外,不需要再配置其它内容,原来写在一起的时候,还要在gloab.asax里添加对log4net的声明,在这个项目中我没有添加也可以输出日志文件,在web应用程序Log.Web的AssemblyInfo.cs中也没有添加对log4net的声明,只是在类库文件的AssemblyInfo.cs中添加了。

7、运行Log.Web应用程序,在Log.Web目录下会多了一个log目录,在log目录下就可以看到日志文件了,

2009-04-26 11:17:36,671 86425156 [8] DEBUG LogOut 15 - 单独日志类测试

 

附加:

log4net.Layout.PatternLayout中的转换模式(ConversionPattern)

%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息

%n(new line):换行

%d(datetime):输出当前语句运行的时刻

%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数

%t(thread id):当前语句所在的线程ID

%p(priority): 日志的当前优先级别,即DEBUGINFOWARN…

%c(class):当前日志对象的名称,

%L:输出语句所在的行号

%F:输出语句所在的文件名

%-数字:表示该项的最小长度,如果不够,则用空格填充

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值