直接代码上代码,按照步骤即可完成(无需配置xml配置文件):
1、Loger.cs
using System; using System.Data; using System.Configuration; using System.Reflection; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using log4net; using logertest; using logertest.Func; /// <summary> /// Loger 的摘要说明 /// </summary> public class Loger { static IWebLog ilog = null; public static string username = "系统"; public static string exceptiontype = "系统异常"; public static string optiontype = "操作日志"; public static void CreateLoger() { //username = HttpContext.Current.Session == null // ? username : HttpContext.Current.Session["uid"] == null ? "" //: HttpContext.Current.Session["uid"].ToString(); if (ilog == null) { Log4netHelper.LoadADONetAppender(); Log4netHelper.LoadRollingFileAppender(); ilog = WebLogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); } } /// <summary> /// 系统异常使用 /// </summary> /// <param name="titlname">标题</param> /// <param name="exceptionmsg">具体异常信息</param> public static void Debug(string titlname, Exception ex) { CreateLoger(); if (ilog != null) if (ilog.IsDebugEnabled) ilog.Debug(username, exceptiontype, System.Web.HttpContext.Current.Request.UserHostAddress, System.Web.HttpContext.Current.Request.Url.ToString(), titlname, ex); } /// <summary> /// 系统异常使用 /// </summary> /// <param name="titlname">信息</param> public static void Debug(string titlname) { CreateLoger(); if (ilog != null) if (ilog.IsDebugEnabled) // ilog.Debug(username, exceptiontype, System.Web.HttpContext.Current.Request.UserHostAddress,System.Web.HttpContext.Current.Request.Url.ToString(), titlname); ilog.Debug(username, exceptiontype, "", "", titlname); } /// <summary> /// 操作日志 /// </summary> /// <param name="titlname">信息</param> public static void Info(string titlname) { CreateLoger(); if (ilog != null) if (ilog.IsInfoEnabled) ilog.Info(username, optiontype, System.Web.HttpContext.Current.Request.UserHostAddress, System.Web.HttpContext.Current.Request.Url.ToString(), titlname); } /// <summary> /// 系统异常使用 /// </summary> /// <param name="titlname">信息</param> public static void Error(string titlname) { CreateLoger(); if (ilog != null) if (ilog.IsErrorEnabled) { //在出现未处理的错误时运行的代码 ilog.Error(username, exceptiontype, HttpContext.Current.Request.UserHostAddress, HttpContext.Current.Request.Url.ToString(), titlname); } } /// <summary> /// 系统异常使用 /// </summary> /// <param name="titlname">信息</param> public static void Error(string titlname, Exception ex) { CreateLoger(); if (ilog != null) if (ilog.IsErrorEnabled) { //在出现未处理的错误时运行的代码 ilog.Error(username, exceptiontype, HttpContext.Current.Request.UserHostAddress, HttpContext.Current.Request.Url.ToString(), ex.Message, ex); } } }
2、Log4netHelper.cs 主要是log4net配置(配置写入数据库或者文本中的规则),偷了个懒(数据连接直接写在代码中,大家可以提出来):
using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Text; using System.Web; using log4net; using log4net.Appender; using log4net.Config; using log4net.Layout; using System.Configuration; using System.Data.SqlClient; namespace logertest.Func { public static class Log4netHelper { //记录异常日志数据库连接字符串 private static string _ConnectionString = "Data Source=.;Initial Catalog=XXXXX;Persist Security Info=True;User ID=sa;Password=XXXXX";// ConfigurationSettings.AppSettings["ConnectionSQLString"].ToString(); /// <summary> /// 使用SQLSERVER 记录异常日志 /// </summary> /// <Author>juno</Author> /// <date>2011-05-01</date> public static void LoadADONetAppender() { LoadRollingFileAppender(); log4net.Repository.Hierarchy.Hierarchy hier = log4net.LogManager.GetLoggerRepository() as log4net.Repository.Hierarchy.Hierarchy; if (hier != null) { log4net.Appender.AdoNetAppender adoAppender = new log4net.Appender.AdoNetAppender(); adoAppender.Name = "AdoNetAppender"; adoAppender.CommandType = CommandType.Text; adoAppender.BufferSize = 1; adoAppender.ConnectionType = "System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; adoAppender.ConnectionString = _ConnectionString; adoAppender.CommandText = @"INSERT INTO SYSTEMLOG ([Date],[Thread],[Level],[Logger],[Message],[Exception],[ClientIP],[RequestUrl],[Username],[Logtype]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception,@ClientIP,@RequestUrl,@Username,@Logtype)"; adoAppender.AddParameter(new AdoNetAppenderParameter { ParameterName = "@log_date", DbType = System.Data.DbType.DateTime, Layout = new log4net.Layout.RawTimeStampLayout() }); adoAppender.AddParameter(new AdoNetAppenderParameter { ParameterName = "@thread", DbType = System.Data.DbType.String, Size = 255, Layout = new Layout2RawLayoutAdapter(new PatternLayout("%thread")) }); adoAppender.AddParameter(new AdoNetAppenderParameter { ParameterName = "@log_level", DbType = System.Data.DbType.String, Size = 50, Layout = new Layout2RawLayoutAdapter(new PatternLayout("%level")) }); adoAppender.AddParameter(new AdoNetAppenderParameter { ParameterName = "@logger", DbType = System.Data.DbType.String, Size = 255, Layout = new Layout2RawLayoutAdapter(new PatternLayout("%logger")) }); adoAppender.AddParameter(new AdoNetAppenderParameter { ParameterName = "@message", DbType = System.Data.DbType.String, Size = 4000, Layout = new Layout2RawLayoutAdapter(new PatternLayout("%message")) }); adoAppender.AddParameter(new AdoNetAppenderParameter { ParameterName = "@ClientIP", DbType = System.Data.DbType.String, Size = 255, Layout = new Layout2RawLayoutAdapter(new PatternLayout("%property{ClientIP}")) }); adoAppender.AddParameter(new AdoNetAppenderParameter { ParameterName = "@RequestUrl", DbType = System.Data.DbType.String, Size = 255, Layout = new Layout2RawLayoutAdapter(new PatternLayout("%property{RequestUrl}")) }); adoAppender.AddParameter(new AdoNetAppenderParameter { ParameterName = "@Username", DbType = System.Data.DbType.String, Size = 255, Layout = new Layout2RawLayoutAdapter(new PatternLayout("%property{Username}")) }); adoAppender.AddParameter(new AdoNetAppenderParameter { ParameterName = "@Logtype", DbType = System.Data.DbType.String, Size = 255, Layout = new Layout2RawLayoutAdapter(new PatternLayout("%property{Logtype}")) }); adoAppender.AddParameter(new AdoNetAppenderParameter { ParameterName = "@exception", DbType = System.Data.DbType.String, Size = 4000, Layout = new Layout2RawLayoutAdapter(new ExceptionLayout()) }); adoAppender.ActivateOptions(); BasicConfigurator.Configure(adoAppender); } } /// <summary> /// 使用文本记录异常日志 /// </summary> /// <Author>juno</Author> /// <date>2011-05-01</date> public static void LoadFileAppender() { string currentPath = AppDomain.CurrentDomain.BaseDirectory; string txtLogPath = string.Empty; string iisBinPath = AppDomain.CurrentDomain.RelativeSearchPath; if (!string.IsNullOrEmpty(iisBinPath)) txtLogPath = Path.Combine(iisBinPath, "ErrorLog.txt"); else txtLogPath = Path.Combine(currentPath, "ErrorLog.txt"); log4net.Repository.Hierarchy.Hierarchy hier = log4net.LogManager.GetLoggerRepository() as log4net.Repository.Hierarchy.Hierarchy; FileAppender fileAppender = new FileAppender(); fileAppender.Name = "LogFileAppender"; fileAppender.File = txtLogPath; fileAppender.AppendToFile = true; PatternLayout patternLayout = new PatternLayout(); patternLayout.ConversionPattern = "\n 记录时间: