一、作用
提供一个记录日志的框架,可以将日志信息记录到文件、控制台、Windows事件日志和数据库(MSSQL、Acess、Oracle、DB2和SQLite等)。
二、先看看示例,感受一下吧
config配置文件
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/> </configSections> <log4net> <!-- 定义日志的输出媒介 --> <root> <appender-ref ref="ConsoleAppender"/> <appender-ref ref="R"/> </root> <!-- 定义输出到控制台 --> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/> </layout> </appender> <!-- 定义输出到日志文件 --> <appender name="R" type="log4net.Appender.FileAppender" rollingStyle="Date" datePattern="yyyyMMdd-HH:mm:ss"> <file value="logs/log.txt"></file> <appendToFile value="true"></appendToFile> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%-d{yyyy-MM-dd HH\:mm\:ss} [%L] [%c]-[%p] %m%n"></conversionPattern> </layout> </appender> </log4net> </configuration>
cs文件
/** * 指定log4net使用.config文件来读取配置信息 * 若为Winform(假定程序为Demo.exe), 那么配置文件则为Demo.exe.config * 若为Webform,则为web.config */ [assembly:log4net.Config.XmlConfigurator(Watch=true)] namespace Demo{ public class MainClass{ public static void Main(String[] args){ ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); log.Error("error", new Exception("there is an exception")); log.Fatal("fatal", new Exception("there is a deadly exception occurs")); log.Info("info"); log.Debug("debug"); log.Warn("warn"); Console.Read(); } } }
三、框架的核心组件
1. Appender
作用:用于定义日志信息的输出介质(文件、控制台、Windows事件日志和数据库(MSSQL、Acess、Oracle、DB2和SQLite等))
内置的Appdner组件:
ConsoleAppender ,输出介质为控制台
FileAppender ,输出介质为文件,示例如下
<appender name="FileAppender" type="log4net.Appender.FileAppender" file="logs/log.txt" appendToFile="true"> <layout type="log4net.Layout.PatternLayout"> .......... </layout> </appender>
RollingFileAppender ,将日志以回滚文件的形式写入文件中。可以指定文件最大容量,当超过就生成一个新文件来记录,且可以指定最多生成日志文件数量,当超过时则覆盖从第一个日志文件开始循环覆盖。
示例1:
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" file="logs/log.txt" appendToFile="true" rollingStyle="Size" maxSizeRollBackups="10" maximumFileSize="100KB" staticLogFileName="true"> <layout type="log4net.Layout.PatternLayout"> .......... </layout> </appender>
示例2:
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" file="logs/log.txt" appendToFile="true" rollingStyle="Date" datePattern="yyyyMMdd"> <layout type="log4net.Layout.PatternLayout"> .......... </layout> </appender>
EventLogAppender ,输出介质为系统日志
AdoNetAppender ,输出介质为数据库,示例如下
<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>