需要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("登录");