Log4net 写文件日志与数据库日志

一、数据库日志表结构

CREATE TABLE [dbo].[WebLog_Msg](
	[LogID] [int] IDENTITY(1,1) NOT NULL,
	[Date] [datetime] NOT NULL,
	[Thread] [nvarchar](255) NULL,
	[Level] [nvarchar](50) NULL,
	[Logger] [nvarchar](255) NULL,
	[Message] [nvarchar](2000) NULL,
	[Exception] [nvarchar](4000) NULL,
 CONSTRAINT [PK_WebLog_Msg] PRIMARY KEY CLUSTERED 
(
	[LogID] ASC
))

 

二、测试类库LoggHelper

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net;

namespace LogHelper
{
    public class LoggHelper
    {
        //static LoggHelper()
        //{
        //    log4net.Config.XmlConfigurator.Configure();
        //}

        private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(LoggHelper));
        public static void LogInfo()
        {
            log.Info("log日志getretertretrree");
        }
        public static void LogWarn()
        {
            log.Warn("log警告WARNaaaaaaaaaad;");
        }
        public static void LogFatal()
        {
            log.Fatal("log警告WARNaaaaaaaaaad;");
        }
        public static void LogError()
        {
            log.Error("log错误sfsfsfsdfafasdfdsfadffafdsaffasf><><>2eewewjklsfaaaaaaaaaaaaaaaaaaaaaaaaaaaaad;");
        }
    }
}

三、控制台测试项目

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using LogHelper;

namespace TestLog4Net
{
    class Program
    {
        
        static void Main(string[] args)
        {
            log4net.Config.XmlConfigurator.Configure();
            try
            {                
                LoggHelper.LogInfo();
                LoggHelper.LogWarn();
                LoggHelper.LogError();             
                LoggHelper.LogFatal();
                Console.ReadLine();

            }
            catch (Exception ex)
            {
                Console.Write(ex);
            }
        }
    }
}


配置文件内容如下:

<?xml version="1.0"?>
<configuration>
  <!--Log4Net config section-->
  <configSections>
    <!--<sectionGroup name="common">
      <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
    </sectionGroup>-->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  </configSections>
  <!--<common>
    <logging>
      <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net">
        <arg key="configType" value="INLINE"/>
      </factoryAdapter>
    </logging>
  </common>-->
  <log4net>
    <root>
      <!--OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL-->
      <level value="ALL"/>
      <appender-ref ref="AdoNetAppender_SqlServer"/>
      <appender-ref ref="RollingLogFileAppender"/>
    </root>
    <!--<logger name="ErrorInfo">
      <level value="ALL" />
      <appender-ref ref="RollingLogFileAppender" />
    </logger>-->
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="Debug" />
        <levelMax value="Info" />
      </filter>
      <param name="File" value="log\errorInfo.txt"/>
      <param name="AppendToFile" value="true"/>
      <param name="MaxSizeRollBackups" value="10"/>
      <param name="MaximumFileSize" value="2MB"/>
      <param name="RollingStyle" value="Size"/>
      <param name="StaticLogFileName" value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
      </layout>
    </appender>
    <appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender">
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="Warn" />
        <levelMax value="Fatal" />
      </filter>
      <bufferSize value="0" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <connectionString value="server=XXXXX;database=WebLog;user id=UID;password=PSW;Connect Timeout=15;"/>
      <commandText value="INSERT INTO WebLog_Msg([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <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="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="2000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.ExceptionLayout" />
      </parameter>
    </appender>
  </log4net>
  <!--Log4Net config section end-->
</configuration>

四、运行结果

     1、文件      

2011-12-31 14:40:17,440 [10] INFO  LogHelper.LoggHelper [(null)] - log日志getretertretrree


     2、数据库

五、优化log4net在项目中的配置

    关注封装日志操作的类库LogHelper:

   

在AssemblyInfo.cs文件中加入[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Configuration/Log4Net.config", Watch = true)],即加入log4net配置项。

在文件Log4Net.config中配置如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!--Log4Net config section-->
  <configSections>
    <!--<sectionGroup name="common">
      <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
    </sectionGroup>-->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  </configSections>
  <!--<common>
    <logging>
      <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net">
        <arg key="configType" value="INLINE"/>
      </factoryAdapter>
    </logging>
  </common>-->
  <log4net>
    <root>
      <!--OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL-->
      <level value="ALL"/>
      <appender-ref ref="AdoNetAppender_SqlServer"/>
      <appender-ref ref="RollingLogFileAppender"/>
    </root>
    <!--<logger name="ErrorInfo">
      <level value="ALL" />
      <appender-ref ref="RollingLogFileAppender" />
    </logger>-->
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="log\errorInfo.txt"/>
      <param name="AppendToFile" value="true"/>
      <param name="MaxSizeRollBackups" value="10"/>
      <param name="MaximumFileSize" value="2MB"/>
      <param name="RollingStyle" value="Size"/>
      <param name="StaticLogFileName" value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--"%d %t %p %l %m %n”:

         1、%d输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss},输出类似:2005-7-19 17:49:27,刚好适合插入SQLServer;

         2、%t  产生该日志事件的线程名;

         3、%p 日志的log_level,如DEBUG、WARN或者INFO;

         4、%c  输出所属的类目,通常就是所在类的全名,如“iNotes.Default”;

         5、%m 日志的内容;

         6、%l  输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。如write2database.main(write2database.java:33);

         7、%n  输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
-->
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
      </layout>
    </appender>
    <appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender">
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="Warn" />
        <levelMax value="Fatal" />
      </filter>
      <bufferSize value="0" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <connectionString value="server=XXXX;database=Weblog;user id=UID;password=PSW"/>
      <commandText value="INSERT INTO WebLog_Msg([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <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="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.ExceptionLayout" />
      </parameter>
    </appender>
  </log4net>
  <!--Log4Net config section end-->
</configuration>

即把应用程序config文件下有关log4net的所有配置项移除放到单一文件Log4Net.config中,这样给应用程序的配置文件“瘦身”不少,呵呵!

ok,编译类库LoggHelper(可在里面封装对log4net的所有操作),将控制台程序改为

static void Main(string[] args)
        {
            //log4net.Config.XmlConfigurator.Configure(); //注释掉
            try
            {                
                LoggHelper.LogInfo();
                LoggHelper.LogWarn();
                LoggHelper.LogError();             
                LoggHelper.LogFatal();
                Console.ReadLine();

            }
            catch (Exception ex)
            {
                Console.Write(ex);
            }
        }

运行,一切ok!

 

附有关log4net的对数据库写日志的配置:

http://logging.apache.org/log4net/release/config-examples.html


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值