1.新建一个空的ASP.Net 空项目,然后添加Default.aspx窗体

2.添加配置文件:log4net.config

 <?xml version="1.0" encoding="utf-8"?>
<configuration> <system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web> <configSections>
<!--添加配置节点-->
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections> <log4net>
<!--定义输出到数据库-->
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<!--日志缓存写入条数-->
<!--bufferSize表示批处理的日志事件,可以避免每次日志事件都访问数据库,原本是<bufferSize value="" />一百条才插入-->
<bufferSize value="" />
<!--日志数据库连接串-->
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="DATABASE=log4netDB;SERVER=DESKTOP-F0T373H\WZH;UID=sa;PWD=18855162320;Connect Timeout=15;" />
<!--日志数据库脚本-->
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[UserID],[UserName],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger,@UserId,@UserName, @message, @exception)" />
<!--日志时间LogDate -->
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<!--日志类型LogLevel -->
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<!--日志对象LogLogger -->
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<!--自定义UserId -->
<parameter>
<parameterName value="@UserId" />
<dbType value="String" />
<size value="" />
<layout type="log4net保存到数据库中.MyLayout">
<conversionPattern value="%Property{UserID}" />
</layout>
</parameter>
<!--自定义UserName -->
<parameter>
<parameterName value="@UserName" />
<dbType value="String" />
<size value="" />
<layout type="log4net保存到数据库中.MyLayout">
<conversionPattern value="%Property{UserName}" />
</layout>
</parameter>
<!--日志信息Message -->
<!--<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>-->
<!--自定义Message -->
<parameter>
<parameterName value="@Message" />
<dbType value="String" />
<size value="" />
<layout type="log4net保存到数据库中.MyLayout">
<conversionPattern value="%Property{Message}" />
</layout>
</parameter>
<!--异常信息Exception -->
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
<root>
<!--配置可输出日志级别-->
<level value="all"/>
<!--应用配置-->
<appender-ref ref="AdoNetAppender"/>
</root>
</log4net> </configuration>

3.在项目中的Properties中AssemblyInfo.cs的末尾添加
  [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

4.添加实体类:LogEntity.cs

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace log4net保存到数据库中
{
public class LogEntity
{
public string UserID { get; set; }
public string UserName { get; set; } public string Message { get; set; }
}
}

5.添加扩展类:MyPatternConverter.cs , MyLayout.cs 来扩展PatternLayout

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using log4net.Layout.Pattern;
using System.Reflection; namespace log4net保存到数据库中
{
public class MyPatternConverter:PatternLayoutConverter
{
protected override void Convert(System.IO.TextWriter writer, log4net.Core.LoggingEvent loggingEvent)
{
if (Option != null)
WriteObject(writer, loggingEvent.Repository, LookupProperty(Option, loggingEvent));
else
WriteDictionary(writer, loggingEvent.Repository, loggingEvent.GetProperties());
} //通过反射获取传入的日志对象的某个属性的值
private object LookupProperty(string property,log4net.Core.LoggingEvent loggingEvent)
{
object propertyvalue = string.Empty;
PropertyInfo propertyInfo = loggingEvent.MessageObject.GetType().GetProperty(property); if (propertyInfo != null)
propertyvalue = propertyInfo.GetValue(loggingEvent.MessageObject, null);
return propertyvalue;
}
}
}

MyPatternConverter.cs

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using log4net.Layout; namespace log4net保存到数据库中
{
public class MyLayout:PatternLayout
{
public MyLayout()
{
this.AddConverter("Property", typeof(MyPatternConverter));
}
}
}

MyLayout.cs

6.添加使用类:LogHelper.cs

 using System;
using System.Diagnostics;
using System.IO; using log4net; namespace log4net保存到数据库中
{
public class LogHelper
{
/// <summary>
/// LoggerName
/// </summary>
public static string LoggerName = string.Empty;
/// <summary>
/// 用户ID
/// </summary>
public static string UserID = string.Empty;
/// <summary>
/// 用户名称
/// </summary>
public static string UserName = string.Empty; private static ILog iLog;
private static LogEntity logEntity; /// <summary>
/// 接口
/// </summary>
private static ILog log
{
get
{ if (iLog == null)
{
iLog = log4net.LogManager.GetLogger(LoggerName);
}
else
{
if (iLog.Logger.Name != LoggerName)
{
iLog = log4net.LogManager.GetLogger(LoggerName);
}
} return iLog;
}
} /// <summary>
/// 构造消息实体
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
private static LogEntity BuildMessageMode(string message)
{
if (logEntity == null)
{
logEntity = new LogEntity();
logEntity.UserID = UserID;
logEntity.UserName = UserName;
logEntity.Message = message;
}
else
logEntity.Message = message; return logEntity;
} /// <summary>
/// 调试
/// </summary>
/// <param name="message">消息</param>
public static void Debug(string message)
{
if (log.IsDebugEnabled)
log.Debug(BuildMessageMode(message));
} /// <summary>
/// 调试
/// </summary>
/// <param name="message">消息</param>
/// <param name="exception">异常</param>
public static void Debug(string message, Exception ex)
{
if (log.IsDebugEnabled)
log.Debug(BuildMessageMode(message), ex);
} /// <summary>
/// 信息
/// </summary>
/// <param name="message">消息</param>
public static void Info(string message)
{
if (log.IsInfoEnabled)
log.Info(BuildMessageMode(message));
} /// <summary>
/// 信息
/// </summary>
/// <param name="message">消息</param>
/// <param name="exception">异常</param>
public static void Info(string message, Exception ex)
{
if (log.IsInfoEnabled)
log.Info(BuildMessageMode(message), ex);
} /// <summary>
/// 一般错误
/// </summary>
/// <param name="message">消息</param>
public static void Error(string message)
{
if (log.IsErrorEnabled)
log.Error(BuildMessageMode(message));
} /// <summary>
/// 一般错误
/// </summary>
/// <param name="message">消息</param>
/// <param name="exception">异常</param>
public static void Error(string message, Exception exception)
{
if (log.IsErrorEnabled)
log.Error(BuildMessageMode(message), exception);
} /// <summary>
/// 警告
/// </summary>
/// <param name="message">消息</param>
public static void Warn(string message)
{
if (log.IsWarnEnabled)
log.Warn(BuildMessageMode(message));
} /// <summary>
/// 警告
/// </summary>
/// <param name="message">消息</param>
/// <param name="exception">异常</param>
public static void Warn(string message, Exception ex)
{
if (log.IsWarnEnabled)
log.Warn(BuildMessageMode(message), ex);
} /// <summary>
/// 严重
/// </summary>
/// <param name="message">消息</param>
public static void Fatal(string message)
{
if (log.IsFatalEnabled)
log.Fatal(BuildMessageMode(message));
} /// <summary>
/// 严重
/// </summary>
/// <param name="message">消息</param>
/// <param name="exception">异常</param>
public static void Fatal(string message, Exception ex)
{
if (log.IsFatalEnabled)
log.Fatal(BuildMessageMode(message), ex);
}
}
}

LogHelper.cs

7.在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 log4net; namespace log4net保存到数据库中
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
LogHelper.LoggerName = typeof(Default).ToString();
LogHelper.UserID = "";
LogHelper.UserName = "me";
int i = ;
try
{ int b = / i;
}
catch (Exception ex)
{
LogHelper.Error(ex.Message, ex);
}
LogHelper.Fatal("Fatal",new Exception("异常信息"));
LogHelper.Info("Info");
LogHelper.Warn("Warn");
LogHelper.Debug("Debug");
}
}
}

Default.aspx.cs

8.配置数据库SQL Server2012:创建数据库log4netDB

 CREATE TABLE [dbo].[Log] (
[Id] [int] IDENTITY (, ) NOT NULL,
[Date] [datetime] NOT NULL,
[Thread] [varchar] () NOT NULL,
[Level] [varchar] () NOT NULL,
[Logger] [varchar] () NOT NULL,
[UserID] [varchar] () NOT NULL,
[UserName] [varchar] () NOT NULL,
[Message] [varchar] () NOT NULL,
[Exception] [varchar] () NULL
)

sql语句

9.运行

10.帮助文档:

http://www.cnblogs.com/izreo/p/5651139.html

http://www.cnblogs.com/jiajinyi/p/5884930.html

最新文章

  1. Hive On Spark概述
  2. Linux进程管理、任务管理
  3. Kindeditor 代码审计
  4. C++-多重继承的注意点
  5. ERP_Oracle Erp 11i 和 R12的区别概述(概念)
  6. Your branch and &#39;origin/master&#39; have diverged
  7. 【JS】Beginner3 &amp; 4 &amp; 5 &amp; 6:Maths &amp; Logic &amp; Conditonal &amp; Looping
  8. WPF资源字典使用
  9. mfix模拟流化床燃烧帮助收敛的方法
  10. quartus ii有符号数的问题(待完善)
  11. swust oj 1051
  12. 你不知道的JS(3)来聊聊this
  13. hdu 4370
  14. impala系列: 字符串函数
  15. 百度AI--自然语言处理之Java开发
  16. Lintcode35-Reverse Linked List-Easy
  17. php-cgi和php-fpm,Windows环境下解决Nginx+php并发访问阻塞问题。
  18. 进阶之路(中级篇) - 018 基于arduino的简易版智能衣架
  19. result源码
  20. Java 常用对象-Date类和Calender类

热门文章

  1. 关于vuecli的一些问题
  2. lsyncd实时同步工具
  3. 属性动画 补间动画 帧动画 基本使用案例 MD
  4. Kafka重启出错:Corrupt index found
  5. js事件(十二)
  6. 83.基于Vue SEO的四种方案(小结)
  7. 物料管理混乱怎么办?APS系统帮你实现高效运输
  8. IntelliJ IDEA 快捷键(转载收藏)
  9. Swagger Liunx环境搭建(亲测百分百可用)
  10. 【RAC】 RAC For W2K8R2 安装--创建ASM磁盘组(六)