利用Log4net记录系统日志信息(支持6种数据库)

  Log4net的优点:

几乎所有的大型应用都会有自己的用于跟踪调试的API。因为一旦程序被部署以后,就不太可能再利用专门的调试工具了。然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题。

经验表明,日志记录往往是软件开发周期中的重要组成部分。它具有以下几个优点:它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的Bug;一旦在程序中加入了Log输出代码,程序运行过程中就能生成并输出日志信息而无需人工干预。另外,日志信息可以输出到不同的地方(控制台,文件等)以备以后研究之用。

代码下载 (支持6种数据库)

效果预览:

下面举例说明利用Log4net控件 将日志信息保存到数据库

一:下载log4net.dll
将log4net.dll拷贝到bin下面,并添加对它的引用

二:在数据库里面创建表Log
create table LOG
(
  LOGDATE   VARCHAR2(20),
  LOG_LEVEL VARCHAR2(255),
  LOGGER    VARCHAR2(255),
  MESSAGE   VARCHAR2(2000),
  EXCEPTION VARCHAR2(2000)
)
三:配置Web.config
注意2个地方:
1:在configSections加入相关代码
 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>

2:log4net里面对数据库连接进行配置
 

<log4net debug="true">

  <!--
   定义loger的名称和使用的appender
   CREATE TABLE `sys_log` (
    `LogDate` datetime DEFAULT NULL,
    `Level` varchar(255) DEFAULT NULL,
    `Logger` varchar(255) DEFAULT NULL,
    `Message` varchar(4000) DEFAULT NULL,
    `Exception` varchar(2000) DEFAULT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
  -->
  <logger name="AA"   >
   <level value="ALL"/>
   <appender-ref ref="ADONetAppender"/>
  </logger>

  <appender name="ADONetAppender" type="log4net.Appender.AdoNetAppender">
   <!--
    定义几条存入数据库 有2条时才写入数据库,没有两条叫缓存
   -->
   <bufferSize value="100"/>
   <param name="ConnectionType" value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data"/>


   <connectionString value="server=server;database=postbankv6;uid=root;pwd=888888;charset=gb2312;"/>

   <commandText value="INSERT INTO sys_log (LogDate,Level,Logger,Message,Exception) VALUES (@log_date, @log_level,@logger, @message, @exception)"/>

   <parameter>
    <parameterName value="@log_date"/>
    <dbType value="DateTime"/>
    <layout type="log4net.Layout.RawTimeStampLayout"/>

   </parameter>
   <parameter>
    <parameterName value="@log_level"/>
    <dbType value="String"/>
    <size value="255"/>
    <layout type="log4net.Layout.PatternLayout">
     <conversionPattern value="%level"/>
    </layout>
   </parameter>
   <parameter>
    <parameterName value="@logger"/>
    <dbType value="String"/>
    <size value="255"/>
    <layout type="log4net.Layout.PatternLayout">
     <conversionPattern value="%C[%M(%L)]"/>
    </layout>
   </parameter>
   <parameter>
    <parameterName value="@message"/>
    <dbType value="String"/>
    <size value="4000"/>
    <layout type="log4net.Layout.PatternLayout">
     <conversionPattern value="%m"/>
    </layout>
   </parameter>
   <parameter>
    <parameterName value="@exception"/>
    <dbType value="String"/>
    <size value="2000"/>
    <layout type="log4net.Layout.ExceptionLayout"/>
   </parameter>

  </appender>

 </log4net>


四:程序调用
1:创建一个辅助类:SystemLog.cs

public class SystemLog
{
    private SystemLog()
    {

    }

    public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("AA");   //选择<logger name="loginfo">的配置

    public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("AA");   //选择<logger name="logerror">的配置

    public static void SetConfig()
    {
        log4net.Config.XmlConfigurator.Configure();
    }

    public static void SetConfig(FileInfo configFile)
    {
        log4net.Config.XmlConfigurator.Configure(configFile);
    }

    public static void WriteLog(string info)
    {
        if (loginfo.IsInfoEnabled)
        {
            loginfo.Info(info);
        }
    }

    public static void WriteLog(string info, Exception se)
    {
        if (logerror.IsErrorEnabled)
        {
            logerror.Error(info, se);
        }
    }

}


2: 创建Global.asax,里面设置相关代码
void Application_Start(object sender, EventArgs e)
{
        //在应用程序启动时运行的代码
        SystemLog.SetConfig();     
 }


3:在页面中调用: 

      strMsg += FormService.UserID + "修改了车辆信息:车辆ID为为:" + model.ID;
      SystemLog.loginfo.Info(strMsg);          


注意:
读取WebConfg问题,网上都建议在globe.ascx里面:
void Application_Start(object sender, EventArgs e)
{
        //在应用程序启动时运行的代码
        PDAManage.SystemLog.SetConfig();     
 }


但我发现当第二次访问该页面的时候,不能成功将日志保存到数据库,以下是我的解决方案:
1:所有页面继承basePage
2:在BasePage里面加上:

  protected override void OnLoad(EventArgs e)
  {         
            if (!base.IsPostBack)
            {
                SystemLog.SetConfig();

            }

  }

 

代码下载 (支持6种数据库)

效果预览:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QQ1422078449

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值