一、什么是log4net組件
Log4net是基於.net開發的一款非常著名的記錄日志開源組件。他最早是2001年7月由NeoWorks Limited啟動的項目,基本的框架源於另外的一個非常著名的姐妹組件-log4j。Log4net記錄日志的功能非常強大。它可以將日志分不同的等級,比不同的樣式,將日志輸出到不同的媒介(數據庫、文本、控制台、郵件……)。
二、log4net的核心內容
Log4net 主要分為5個核心主鍵: Logger,Appender,Filter,Layout,Object Render
Logger:
主要用於記錄日志的分類和控制日志的級別。它可以以多種格式輸出日志信息,同時它也可以控制日志的輸出級別。
Log4net 分為如下幾個級別:
FATAL 毀滅級別
ERROR 錯誤級別
WARN 警告級別
INFO 消息級別
DEBUG 調試級別
這幾種日志級別 FATAL> ERROR> WARN> INFO>DEBUG
只有日志輸出級別大於或等於配置的級別才能輸出日志信息
比如我的日志配置級別為INFO
那么只有log.Info() log.Warn()log.Error() log.Fatal()才能輸出日志信息,Debug方式就不能輸出。
Log4net中還有兩種特殊的配置級別: ALL 允許所有的日志級別輸出 OFF 拒絕所有的日志級別輸出
Appender:
這里我們簡單稱之為 媒體。意思就是說日志的輸出必須依賴於它,更確切的說以文本形式輸出,還是控制台格式輸出都必須要依靠它來控制。Log4net定義了多種媒體:
(1) AdoNetAppender 將日志記錄到數據庫中。可以采用SQL和存儲過程兩種方式
(2) AnsiColorTerminalAppender 在ANSI 窗口終端寫下高亮度的日志事件
(3) AspNetTraceAppender 能用asp.net中Trace的方式查看記錄的日志
(4) BufferingForwardingAppender 在輸出到子Appenders之前先緩存日志事件
(5) ConsoleAppender 將日志輸出到控制台
(6) EventLogAppender 將日志寫到Windows Event Log
(7) FileAppender 將日志寫到文件中
(8) MemoryAppender 將日志存到內存緩沖區
(9) NetSendAppender 將日志輸出到Windows Messenger service.這些日志信息將在用戶終端的對話框中顯示
(10) RemoteSyslogAppender 通過UDP網絡協議將日志寫到Remote syslog service
(11) RemotingAppender 通過.NET Remoting將日志寫到遠程接收端
(12) RollingFileAppender 將日志以回滾文件的形式寫到文件中
(13) SmtpAppender 將日志寫到郵件中
(14) TraceAppender 將日志寫到.NET trace 系統
(15) UdpAppender 將日志connectionless UDP datagrams的形式送到遠程宿主或以UdpClient的形式廣播
Filter:
Appender 是將日志以缺省值的方式輸出,意思就是按照默認值的方式輸出。而Filter 意思就是過濾器,使用Filter 可以將日志以不同格式來輸出
Layout:
這個用於控制日志輸出顯示格式
Object Render:
用於按照用戶自定義標准來輸出日志
三、代碼演示跟着來
0.在引用中添加log4net.dll
1.新建一個配置文件(這里可以配置日志寫入到sql 、 txt 、 郵件,以及設置日志級別等)
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<log4net debug="false">
<!--按日期分割日志文件 一天一個-->
<appender name="LogFileAppenderByDate" type="log4net.Appender.RollingFileAppender" >
<!--是否續寫-->
<param name="AppendToFile" value="true" />
<!--最小鎖定模型以允許多個進程可以寫入同一個文件-->
<param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />
<param name="StaticLogFileName" value="true" />
<!--保存路徑-->
<param name="File" value="F:\Log\\" />
<param name="DatePattern" value="yyyy-MM-dd.LOG" />
<param name="StaticLogFileName" value="false" />
<param name="RollingStyle" value="Date" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="時間:%d %n級別:%level %n類名:%c%n文件:%F 第%L行%n日志內容:%m%n-----------------------------------------%n%n" />
</layout>
</appender>
<!--按日志容量分割日志文件 10KB一個-->
<appender name="LogFileAppenderBySize" type="log4net.Appender.RollingFileAppender" >
<!--是否續寫-->
<param name="AppendToFile" value="true" />
<!--最小鎖定模型以允許多個進程可以寫入同一個文件-->
<param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />
<param name="StaticLogFileName" value="true" />
<!--按照文件的大小進行變換日志文件-->
<param name="RollingStyle" value="Size" />
<param name="File" value="LogData\\log.txt" />
<!--單個文件最大數量 好像只有在 按Size分割時有效-->
<param name="MaximumFileSize" value="10KB"/>
<!--保留的log文件數量 超過此數量后 自動刪除之前的 好像只有在 按Size分割時有效-->
<param name="MaxSizeRollBackups" value="2" />
<param name="StaticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="發生時間:%d %n事件級別:%level %n相關類名:%c%n程序文件:%F 第%L行%n日志內容:%m%n-----------------------------------------%n%n" />
</layout>
</appender>
<!--記錄日志到數據庫-->
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="100" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="Data Source=LKYKJYXG-341C59\LKY;database = ITweb;Integrated security = true;" />
<commandText value="INSERT INTO Log ([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="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
<root>
<!--設置輸出級別-->
<level value="INFO" />
<!--啟用按日期分割-->
<appender-ref ref="LogFileAppenderByDate" />
<!--啟用按容量分割-->
<!--<appender-ref ref="LogFileAppenderBySize" />-->
<!--啟用保存到數據庫-->
<appender-ref ref="AdoNetAppender" />
</root>
</log4net>
</configuration>
2.在Global.asax文件下寫入代碼
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Security; using System.Web.SessionState; using System.IO; namespace WebApplication1 { public class Global : System.Web.HttpApplication { void Application_Start(object sender, EventArgs e) { // 在應用程序啟動時運行的代碼 log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(Server.MapPath("/log4nethh.config"))); } void Application_End(object sender, EventArgs e) { // 在應用程序關閉時運行的代碼 } void Application_Error(object sender, EventArgs e) { // 在出現未處理的錯誤時運行的代碼 } void Session_Start(object sender, EventArgs e) { // 在新會話啟動時運行的代碼 } void Session_End(object sender, EventArgs e) { // 在會話結束時運行的代碼。 // 注意: 只有在 Web.config 文件中的 sessionstate 模式設置為 // InProc 時,才會引發 Session_End 事件。如果會話模式設置為 StateServer // 或 SQLServer,則不會引發該事件。 } } }
3.寫入LogHelper類
using System; using System.Collections.Generic; using System.Linq; using System.Web; using log4net; namespace WebApplication1 { /// <summary> /// 日志輔助類 /// </summary> public class LogHelper { private static ILog log; private static LogHelper logHelper = null; /// <summary> /// 初始化 /// </summary> /// <returns></returns> public static ILog GetInstance() { logHelper = new LogHelper(null); return log; } /// <summary> /// 初始化 /// </summary> /// <param name="configPath"></param> /// <returns></returns> public static ILog GetInstance(string configPath) { logHelper = new LogHelper(configPath); return log; } /// <summary> /// 構造函數 /// </summary> /// <param name="configPath"></param> private LogHelper(string configPath) { if (!string.IsNullOrEmpty(configPath)) { log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(configPath)); } else { log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); } } } }
4.使用Log4net的方法(下面的可以寫為一個方法,哪里使用哪里調用。)
Exception exp = Server.GetLastError(); string strE = "\r\n堆棧:" + exp.StackTrace + "\r " + "Message:" + exp.Message + "\r 來源:" + exp.Source + "\r 來源:" + Request.Url; Response.Write(strE); // 在事件日志中記錄異常信息 ILog log = LogHelper.GetInstance(); log.Warn(strE); Server.ClearError(); Server.Transfer("Error.aspx", false);
四、更詳細的配置文件
<?xml version="1.0"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetCoigurationSectionHandler,log4net"/> </configSections> <log4net> <!--MS SQL Server--> <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> <bufferSize value="100" /> <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <connectionString value="data source=[database server];initial catalog=[database name];integrated security=false;persist security info=True;User ID=[user];Password=[password]" /> <commandText value="INSERT INTO Log ([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="4000" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%message" /> </layout> </parameter> <parameter> <parameterName value="@exception" /> <dbType value="String" /> <size value="2000" /> <layout type="log4net.Layout.ExceptionLayout" /> </parameter> </appender> <!--MS Access--> <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender"> <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\log\access.mdb;User Id=;Password=;" /> <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)" /> <parameter> <parameterName value="@log_date" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date" /> </layout> </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="1024" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%message" /> </layout> </parameter> </appender> <!--Oracle9i--> <appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender"> <connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <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> <!--IBM DB2--> <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> <bufferSize value="100" /> <connectionType value="IBM.Data.DB2.DB2Connection,IBM.Data.DB2, Version=8.1.2.1" /> <connectionString value="server=192.168.0.0;database=dbuser;user Id=username;password=password;persist security info=true" /> <commandText value="INSERT INTO myschema.Log (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="500" /> <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> <parameter> <parameterName value="@exception" /> <dbType value="String" /> <size value="2000" /> <layout type="log4net.Layout.ExceptionLayout" /> </parameter> </appender> <!--SQLite--> <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> <bufferSize value="100" /> <connectionType value="Finisar.SQLite.SQLiteConnection, SQLite.NET, Version=0.21.1869.3794, Culture=neutral, PublicKeyToken=c273bd375e695f9c" /> <connectionString value="Data Source=c:\\inetpub\\wwwroot\\logs\\log4net.db;Version=3;" /> <commandText value="INSERT INTO Log (Date, Level, Logger, Message) VALUES (@Date, @Level, @Logger, @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="@Message" /> <dbType value="String" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%message" /> </layout> </parameter> </appender> <!--AspNetTraceAppender--> <appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender" > <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <!--BufferingForwardingAppender--> <!--<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" > <bufferSize value="100"/> <appender-ref ref="ConsoleAppender" /> </appender>--> <appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" > <bufferSize value="512" /> <lossy value="true" /> <evaluator type="log4net.Core.LevelEvaluator"> <threshold value="WARN"/> </evaluator> <appender-ref ref="ConsoleAppender" /> </appender> <!--ColoredConsoleAppender--> <!--<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> <mapping> <level value="ERROR" /> <foreColor value="White" /> <backColor value="Red, HighIntensity" /> </mapping> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender>--> <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> <mapping> <level value="ERROR" /> <foreColor value="White" /> <backColor value="Red, HighIntensity" /> </mapping> <mapping> <level value="DEBUG" /> <backColor value="Green" /> </mapping> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <!--ConsoleAppender--> <!--<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="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <target value="Console.Error" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <!--EventLogAppender--> <!--<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" > <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender>--> <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" > <applicationName value="MyApp" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <!--FileAppender--> <!--<appender name="FileAppender" type="log4net.Appender.FileAppender"> <file value="log-file.txt" /> <appendToFile value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <appender name="FileAppender" type="log4net.Appender.FileAppender"> <file value="${TMP}\log-file.txt" /> <appendToFile value="true" /> <encoding value="unicodeFFFE" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender>--> <appender name="FileAppender" type="log4net.Appender.FileAppender"> <file value="${TMP}\log-file.txt" /> <appendToFile value="true" /> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <!--ForwardingAppender--> <appender name="ForwardingAppender" type="log4net.Appender.ForwardingAppender" > <threshold value="WARN"/> <appender-ref ref="ConsoleAppender" /> </appender> <!--MemoryAppender--> <appender name="MemoryAppender" type="log4net.Appender.MemoryAppender"> <onlyFixPartialEventData value="true" /> </appender> <!--NetSendAppender--> <appender name="MemoryAppender" type="log4net.Appender.MemoryAppender"> <onlyFixPartialEventData value="true" /> </appender> <!--NetSendAppender--> <appender name="NetSendAppender" type="log4net.Appender.NetSendAppender"> <threshold value="ERROR" /> <server value="SQUARE" /> <recipient value="nicko" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <!--OutputDebugStringAppender--> <appender name="OutputDebugStringAppender" type="log4net.Appender.OutputDebugStringAppender" > <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <!--RemotingAppender--> <!--<appender name="RemotingAppender" type="log4net.Appender.RemotingAppender" > <sink value="tcp://localhost:8085/LoggingSink" /> <lossy value="false" /> <bufferSize value="95" /> <onlyFixPartialEventData value="true" /> </appender>--> <appender name="RemotingAppender" type="log4net.Appender.RemotingAppender" > <sink value="tcp://localhost:8085/LoggingSink" /> <lossy value="true" /> <bufferSize value="200" /> <onlyFixPartialEventData value="true" /> <evaluator type="log4net.Core.LevelEvaluator"> <threshold value="ERROR"/> </evaluator> </appender> <!--RollingFileAppender--> <!--<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="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] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="logfile" /> <appendToFile value="true" /> <rollingStyle value="Date" /> <datePattern value="yyyyMMdd-HHmm" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="logfile" /> <appendToFile value="true" /> <rollingStyle value="Composite" /> <datePattern value="yyyyMMdd" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="1MB" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender>--> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="logfile.txt" /> <appendToFile value="false" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="-1" /> <maximumFileSize value="50GB" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <!--SmtpAppender--> <!--<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender"> <to value="to@domain.com" /> <from value="from@domain.com" /> <subject value="test logging message" /> <smtpHost value="SMTPServer.domain.com" /> <bufferSize value="512" /> <lossy value="true" /> <evaluator type="log4net.Core.LevelEvaluator"> <threshold value="WARN"/> </evaluator> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" /> </layout> </appender> <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender"> <to value="to@domain.com" /> <from value="from@domain.com" /> <subject value="test logging message" /> <smtpHost value="SMTPServer.domain.com" /> <bufferSize value="512" /> <lossy value="false" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" /> </layout> </appender>--> <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender,log4net"> <to value="to@domain.com" /> <from value="from@domain.com" /> <subject value="test logging message" /> <smtpHost value="SMTPServer.domain.com" /> <bufferSize value="512" /> <lossy value="false" /> <evaluator type="log4net.Core.LevelEvaluator,log4net"> <threshold value="WARN" /> </evaluator> <layout type="log4net.Layout.PatternLayout,log4net"> <conversionPattern value="%property{log4net:HostName} :: %level :: %message %newlineLogger: %logger%newlineThread: %thread%newlineDate: %date%newlineNDC: %property{NDC}%newline%newline" /> </layout> </appender> <!--SmtpPickupDirAppender--> <appender name="SmtpPickupDirAppender" type="log4net.Appender.SmtpPickupDirAppender"> <to value="to@domain.com" /> <from value="from@domain.com" /> <subject value="test logging message" /> <pickupDir value="C:\SmtpPickup" /> <bufferSize value="512" /> <lossy value="true" /> <evaluator type="log4net.Core.LevelEvaluator"> <threshold value="WARN"/> </evaluator> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" /> </layout> </appender> <!--TraceAppender--> <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <!--UdpAppender--> <appender name="UdpAppender" type="log4net.Appender.UdpAppender"> <localPort value="8080" /> <remoteAddress value="224.0.0.1" /> <remotePort value="8080" /> <layout type="log4net.Layout.PatternLayout, log4net"> <conversionPattern value="%-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> </log4net> </configuration>