log4net配置在.net4.0

来源:互联网 发布:改善唇色 知乎 编辑:程序博客网 时间:2024/04/27 10:25

需要dll

1、log4net.dll   测试版本 1.2.10.0

2、System.Data.OracleClient.dll  版本4.0 (测试了 Oracle.DataAccess.dll 不知道为什么不行,无法写入记录)

数据库脚本

1、日志数据库

drop table SYS_LOG cascade constraints;

/*==============================================================*/
/* Table: SYS_LOG                                               */
/*==============================================================*/
create table SYS_LOG  (
   LOGID                VARCHAR2(36)                    not null,
   LOGDATE              DATE,
   THREAD               VARCHAR2(300),
   LOGLEVEL             VARCHAR2(30),
   LOGGER               VARCHAR2(200),
   MESSAGE              VARCHAR2(4000),
   constraint PK_SYS_LOG primary key (LOGID)
);

comment on table SYS_LOG is
'系统日志';

comment on column SYS_LOG.LOGID is
'系统日志ID';

comment on column SYS_LOG.LOGDATE is
'记录时间';

comment on column SYS_LOG.THREAD is
'线程';

comment on column SYS_LOG.LOGLEVEL is
'级别';

comment on column SYS_LOG.LOGGER is
'记录者';

comment on column SYS_LOG.MESSAGE is
'信息';

2、自增序列

drop sequence MYLOGSEQ;

create sequence MYLOGSEQ
increment by 1
start with 1
nomaxvalue
order
minvalue 1;

web.config

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

<log4net>
    <appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender">
      <connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      <connectionString value="data source=orcl;User ID=xxxx;Password=xxxx" />
      <commandText value="INSERT INTO SYS_LOG (LOGID, LOGDATE, THREAD, LOGLEVEL, LOGGER, MESSAGE) VALUES (MYLOGSEQ.nextval, :log_date, :thread, :log_level, :logger, :message)" />
      <bufferSize value="10" />
      <parameter>
        <parameterName value=":log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
      <parameter>
        <parameterName value=":thread" />
        <dbType value="String" />
        <size value="300" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value=":log_level" />
        <dbType value="String" />
        <size value="30" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value=":logger" />
        <dbType value="String" />
        <size value="200" />
        <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>
    </appender>
    <root>
      <!--设置日志的级别-->
      <level value="Error"/>
      <appender-ref ref="AdoNetAppender_Oracle"/>
    </root>
  </log4net>

调用

using System;
using System.Web;
using log4net;
using log4net.Appender;

/// <summary>
///LogClass 的摘要说明
/// </summary>
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
public class LogClass : AdoNetAppender
{
    public LogClass()
    {
        //
        //TODO: 在此处添加构造函数逻辑
        //
    }


    //定义log属性
    private static ILog _Log;
    private static ILog Log
    {
        get
        {
            //获取当前活动页面句柄
            HttpContext content = System.Web.HttpContext.Current;
            IHttpHandler handler = content.Handler;
            _Log = LogManager.GetLogger(handler.GetType());
            return _Log;
        }
    }

    /// <summary>
    /// 写入出错级别日志
    /// </summary>
    /// <param name="message">消息</param>
    /// <param name="message">异常信息</param>
    public static void Error(string message, Exception exception)
    {
        LoginUser lu = HttpContext.Current.Session["LoginUser"] as LoginUser;

        Error(lu.DBNAME
            , lu.JGID
            , lu.CZYID
            , message, exception);
    }

    /// <summary>
    /// 写入出错级别日志
    /// </summary>
    /// <param name="dbName">数据库名称</param>
    /// <param name="message">消息</param>
    /// <param name="message">操作员ID</param>
    private static void Error(string dbName, string jgid, string czyid, string message, Exception exception)
    {
        Log.Error(string.Format("数据库:{0};操作员:{1};错误信息:{2}", dbName,czyid, message), exception);
    }

    /// <summary>
    /// 写入正常级别日志
    /// </summary>
    /// <param name="dbName">数据库名称</param>
    /// <param name="message">消息</param>
    /// <param name="message">操作员ID</param>
    public static void Fatal(string message)
    {
        LoginUser lu = HttpContext.Current.Session["LoginUser"] as LoginUser;

        Log.Fatal(string.Format("数据库:{0};操作员:{1};操作:{2};"
            , lu.DBNAME, lu.CZYID, message));
    }
}

方法调用

LogClass.Fatal("登录");

原创粉丝点击