您的位置:首页 > 数据库

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

2015-10-30 15:53 387 查看
一、数据库日志表结构

[sql] view
plaincopy

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

[csharp] view
plaincopy

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;");

}

}

}

三、控制台测试项目

[csharp] view
plaincopy

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);

}

}

}

}

配置文件内容如下:

[csharp] view
plaincopy

<?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、文件

[plain] view
plaincopy

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中配置如下:

[html] view
plaincopy

<?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的所有操作),将控制台程序改为

[csharp] view
plaincopy

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: