Log4net 写文件日志与数据库日志
来源:互联网 发布:ipad 笔记软件 知乎 编辑:程序博客网 时间:2024/05/19 12:36
一、数据库日志表结构
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
- Log4net 写文件日志与数据库日志
- Log4net 写文件日志与数据库日志
- 引用Log4Net写文件日志
- log4net 写日志到 Sql server 数据库
- 在.net中用log4net写日志文件
- 让Log4Net 立即写日志文件
- 使用Log4Net写日志
- log4net无法写日志
- LOG4NET写日志
- log4net写日志方法
- Log4Net 写入日志文件
- 使用Log4Net - 文件日志
- [C#]log4net写SQLServer数据库日志的配置方法
- [C#]log4net写SQLServer数据库日志的配置方法
- log4net写SQLServer数据库日志的配置方法
- log4net 写操作日志到oracle数据库debug
- 配置Log4net把日志写到SQLServer数据库
- log4net 写日志到mssql
- WM C# GPRS自动连网
- 单件模式(Single Pattern)
- mpich2+torque+maui并行集群搭建
- C#与SQL server 的连接
- 学习effective java-10对所有对象共同的方法之覆写toString方法
- Log4net 写文件日志与数据库日志
- JDK5.0新特性--可变参数
- 如何快速删除文件
- 算法设计与分析
- android中Touch事件的处理逻辑
- android学习笔记19:ListView
- ant property 总结
- Android模拟器不能启动
- 设置PowerDesigner 字体