说明自从上次在2008年在博客上发表过有关log4net的用法介绍文章以后(网址:http://blog.csdn.net/zhoufoxcn/archive/2008/03/26/2220533.aspx),有很多朋友在博文下留言询问一些细节,如今就一些比较广泛的问题作一些稍微深刻的解答,但愿你们满意。web
- <configSections>
- <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
- </configSections>
- <appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender">
- <connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient" />
- <connectionString value="data source=[mydatabase];User ID=[user];Password=[password]" />
- <commandText value="INSERT INTO Log (Datetime,Thread,Log_Level,Logger,Message) VALUES (:log_date, :thread, :log_level, :logger, :message)" />
- <bufferSize value="128" />
- <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="4000" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%message" />
- </layout>
- </parameter>
- </appender>
- create table log (
- Datetime timestamp(3),
- Thread varchar2(255),
- Log_Level varchar2(255),
- Logger varchar2(255),
- Message varchar2(4000)
- );
在本例中周公采用了将日志记录到SQLite这个单机数据库的方式,而且还将记录记录日志时的文件名和行号,建立SQLite的SQL语句以下:sql
- CREATE TABLE Log (
- LogId INTEGER PRIMARY KEY,
- Date DATETIME NOT NULL,
- Level VARCHAR(50) NOT NULL,
- Logger VARCHAR(255) NOT NULL,
- Source VARCHAR(255) NOT NULL,
- Message TEXT DEFAULT NULL
- );
增长的< appender>节点配置以下:数据库
- <appender name="AdoNetAppender_SQLite" type="log4net.Appender.AdoNetAppender">
- <bufferSize value="100" />
- <connectionType value="System.Data.SQLite.SQLiteConnection, System.Data.SQLite, Version=1.0.66.0, Culture=neutral" />
- <!--SQLite链接字符串-->
- <connectionString value="Data Source=c:\\log4net.db;Version=3;" />
- <commandText value="INSERT INTO Log (Date, Level, Logger,Source, Message) VALUES (@Date, @Level, @Logger, @Source, @Message)" />
- <parameter>
- <parameterName value="@Date" />
- <dbType value="DateTime" />
- <layout type="log4net.Layout.RawTimeStampLayout" />
- </parameter>
- <parameter>
- <parameterName value="@Level" />
- <dbType value="String" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%level" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@Logger" />
- <dbType value="String" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%logger" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@Source" />
- <dbType value="String" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%file:%line" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@Message" />
- <dbType value="String" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%message" />
- </layout>
- </parameter>
- </appender>
- <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
- <file value="RollingFileAppender_log.txt" />
- <appendToFile value="true" />
- <rollingStyle value="Size" />
- <maxSizeRollBackups value="10" />
- <maximumFileSize value="100KB" />
- <staticLogFileName value="true" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] - %message%newline" />
- </layout>
- </appender>
- <appender name="RollingLogFileAppender_DateFormat" type="log4net.Appender.RollingFileAppender">
- <file value="RollingLogFileAppender_DateFormat_log.txt" />
- <appendToFile value="true" />
- <rollingStyle value="Date" />
- <!--<datePattern value="yyyyMMdd-HHmm" />-->
- <datePattern value="yyyyMMdd" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%date [%thread](%file:%line) %-5level %logger [%property{NDC}] - %message%newline" />
- </layout>
- </appender>
- <root>
- <!--文件形式记录日志-->
- <appender-ref ref="LogFileAppender" />
- <!--控制台控制显示日志-->
- <appender-ref ref="ConsoleAppender" />
- <!--Windows事件日志-->
- <!--<appender-ref ref="EventLogAppender" />-->
- <!--SQLite事件日志-->
- <appender-ref ref="AdoNetAppender_SQLite" />
- <!--RollingFileAppender事件日志-->
- <appender-ref ref="RollingFileAppender" />
- <!--RollingFileAppender事件日志,天天一个日志-->
- <appender-ref ref="RollingLogFileAppender_DateFormat" />
- <!-- 若是不启用相应的日志记录,能够经过这种方式注释掉
- <appender-ref ref="AdoNetAppender_Access" />
- -->
- </root>
- using System;
- using System.Collections.Generic;
- using System.Text;
- using log4net;
- using System.Reflection;
- //注意下面的语句必定要加上,指定log4net使用.config文件来读取配置信息
- //若是是WinForm(假定程序为MyDemo.exe,则须要一个MyDemo.exe.config文件)
- //若是是WebForm,则从web.config中读取相关信息
- [assembly: log4net.Config.XmlConfigurator(Watch = true)]
- namespace Log4NetDemo
- {
- class Program
- {
- static void Main(string[] args)
- {
- Random random = new Random();
- for (int i = 0; i < 1; i++)
- {
- //建立日志记录组件实例
- //ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
- ILog log=log4net.LogManager.GetLogger(typeof(Program));
- //记录错误日志
- //log.Error("error", new Exception("在这里发生了一个异常,Error Number:"+random.Next()));
- //记录严重错误
- //log.Fatal("fatal", new Exception("在发生了一个致命错误,Exception Id:"+random.Next()));
- //记录通常信息
- //log.Info("提示:系统正在运行");
- //记录调试信息
- //log.Debug("调试信息:debug");
- //记录警告信息
- //log.Warn("警告:warn");
- }
- Console.WriteLine("日志记录完毕。");
- Console.Read();
- }
- }
- }
- using System;
- using System.Collections.Generic;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using log4net;
- using System.Reflection;
- [assembly: log4net.Config.XmlConfigurator(Watch = true)]
- public partial class _Default : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!Page.IsPostBack)
- {
- Random random = new Random();
- for (int i = 0; i < 1; i++)
- {
- //建立日志记录组件实例
- ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
- //ILog log = log4net.LogManager.GetLogger(typeof(Program));
- //记录错误日志
- //log.Error("error", new Exception("在这里发生了一个异常,Error Number:"+random.Next()));
- //记录严重错误
- //log.Fatal("fatal", new Exception("在发生了一个致命错误,Exception Id:"+random.Next()));
- //记录通常信息
- //log.Info("提示:系统正在运行");
- //记录调试信息
- //log.Debug("调试信息:debug");
- //记录警告信息
- log.Warn("警告:warn");
- Response.Write("日志记录完毕。");
- }
- }
- }
- }
能够看出它们的代码基本没有区别。apache
下面是一个在WinForm下的config文件的完整配置,该配置文件所使用的代码就是在上面所使用到的代码,使用LogFileAppender、ConsoleAppender、EventLogAppender、AdoNetAppender_SQLite、RollingFileAppender、RollingLogFileAppender_DateFormat方式记录日志都在本地经过测试。完整的config请见附件。缓存
总结:网络
本篇主要是补充在上一篇关于Log4Net中未尽之处,并集中详尽回答了一些朋友在该篇博文下的提问,若有未尽之处,请在本篇下留言。若有初学者碰巧路过不知config文件为什么物,请看《asp.net夜话之十一:web.config详解》,网址是:http://zhoufoxcn.blog.51cto.com/792419/166441。app
周公
2010-11-23框架