日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

程序的记事本--log4net

發布時間:2025/7/14 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 程序的记事本--log4net 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
你是否在遇到程序執行問題時常常百度?你是否在遇到執行錯誤時常常去詢問別人?假設有那么是時候改變啦。對于一個Developer來說那是不專業的表現。專業的Developer都會首先查看程序的執行日志,先從日志下手,分析問題發生的原因,然后修復它。

這里面最重要的就是日志,那么你也就會非常好奇,這些日志是怎樣記錄的呢。偷偷的告訴你通常使用的是日志管理框架。

那么是不是也想在開發程序時開發出一個日志管理的模塊呢。不用著急以下就來介紹下怎樣做日志管理。

? ? ? ? 就我所知如今日志管理框架有多種如 Enterprise、NLog、CLog、Log4net,當中Log4net功能強大適用于中大型的項目日志管理。NLog盡管功能較少可是它使用簡單。并且支持智能感應,另外Enterprise更是強大的沒的說,針對于大型系統開發,當然使用也比較困難。可是考慮到它們的使用資源及功能的強大,最后我們的項目確定了使用Log4net,所以接下來將會主要討論Log4net的主要用法。

一、Log4net組成及配置


? ? ? ? 從Log4net的API文檔中不難看出,事實上Log4net的開發過程還是蠻簡單的,并沒有想象中的那么復雜,并且在使用時僅僅須要加入對應的配置節信息然后調用存儲方法就可以實現日志的存儲。詳細的結構例如以下圖



? 1.1 組成具體解釋

? ? ? ? 上圖顯示了Log4net的主要由五個部分組成,分別為Logger。Appenders, Filters, Layouts 和Object Renders,當中最基本的Appender命名空間中封裝了日志的存儲方式。也就是說通過配置Appender可以將日志輸出到運行的類型中;Layout事實上是封裝了數據顯示的格式。通過配置Layout可以輸出指定模板的數據信息,它還可以控制數據的輸出類型(輸出xml還是文本類型);Object Renders非常重要。它可以控制數據的自己定義輸出,log4net將會依照用戶定義的標準輸出日志。


? 1.2 配置方法

? ? ? ? 在使用log4net時首先須要配置日志存儲方式,然后在代碼中調用LogManager類的靜態方法GetLog保存對象的對象的信息。當中配置信息能夠寫到config文件內。也能夠自己定義一個xml文檔。把詳細的配置節信息寫到xml文件就可以。

二、用法


? ? ? ?log4net有多重存儲級別,依照日志信息的情況大致分為了5類。它們各自是Error錯誤日志、Fatal嚴重錯誤日志、Info一般信息日志、Debug調試信息日志和Warn警告信息日志,在日志管理時能夠依照日志的級別來考慮存放的方式,對于嚴重日志往往是系統的重大問題,此時能夠考慮存到server數據庫中,其他的一些日志能夠考慮存儲到文件里,能夠提高server性能。接下來將會介紹它的幾種用法。


? ? 2.1 日志輸出到DataBase

? ? ? ? 把日志輸出到數據庫中也是非常多系統常常使用的日志存儲方法,在小數據量的處理過程中將日志保存到數據庫中是可行的。可是假設須要處理的日志數據量較大那么這樣的存儲方法就會減少數據庫的性能,所以在存儲日志時謹慎使用這樣的方式,建議涉及到系統重大問題時採用此種存儲方式。這樣會提升數據庫的性能。

詳細配置例如以下:

<appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender"><bufferSize value="1"></bufferSize><connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /><connectionString value="Data Source=.;Initial Catalog=Test;Integrated Security=True;Pooling=False" /><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="DateTime" /><layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" /></parameter><parameter><parameterName value="@thread" /><dbType value="String" /><size value="255" /><layout type="log4net.Layout.PatternLayout" value="%thread" /></parameter><parameter><parameterName value="@log_level" /><dbType value="String" /><size value="50" /><layout type="log4net.Layout.PatternLayout" value="%level" /></parameter><parameter><parameterName value="@logger" /><dbType value="String" /><size value="255" /><layout type="log4net.Layout.PatternLayout" value="%logger" /></parameter><parameter><parameterName value="@message" /><dbType value="String" /><size value="4000" /><layout type="log4net.Layout.PatternLayout" value="%message" /></parameter> </appender>
? ? ? ?另外剛開始學習的人在寫入數據庫時可能會有非常多問題。最基本的是不能寫入數據。這主要是因為connectionType和connectionString的原因。要又一次檢查改動才干夠,尤其是connectionType中sqlconnection的版本號問題,假設不能成功寫入數據往往就是它造成的。

? ?2.2 日志輸出到File

? ? ? 另外我們也能夠將數據輸出到文件里,用戶能夠自己定義文件輸出的類型,通過datePattern標簽來設置存儲文件的類型及文件名稱,詳細例如以下配置所看到的:

<log4net><!--定義輸出到文件里--><appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"><file value="D:\" /><appendToFile value="true" /><rollingStyle value="Date" /><maxSizeRollBackups value="30" /><datePattern value="yyyy-MM-dd'.log'" /><staticLogFileName value="false" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="{%level}%date{MM/dd HH:mm:ss} - %message%newline" /></layout></appender><root><!--文件形式記錄日志--><appender-ref ref="RollingLogFileAppender" /> </root></log4net>


? ? ? ?此種方式在指定的文件夾下創建指定的文件,并將日志信息寫入創建的文件里。


? ?2.3 日志輸出到Console

? ? ? ?輸出到控制臺中已經不陌生,在windows操作系統中常常可以看到錯誤信息,這樣的方式可以非常直觀的告訴用戶錯誤的情況及原因,可是這樣的方式僅僅是緩存級別的,系統又一次啟動時錯誤信息就會被刪除。所以在使用此種方法時應配合著上面說到的方法來綜合存儲日志。增強系統的健壯性。

<log4net><!--定義輸出到控制臺命令行中--><appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /></layout></appender><root><!--控制臺控制顯示日志--><appender-ref ref="ConsoleAppender" /> </root></log4net>


? ? 2.4 日志輸出到Event

? ? ? ?上面介紹了幾種經常使用的輸出方式,當然log4net還有很多其它的輸出方式。這里再介紹一種輸出到WindowsEvent的方法,這樣的方法將會把錯誤信息輸出到Windows事件中,盡管不經常使用,但也能夠作為一種日志的存儲方式。

<log4net><!--定義輸出到windows事件中--><appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /></layout></appender><!--定義日志的輸出媒介,以下定義日志以四種方式輸出。

也能夠以下的依照一種類型或其它類型輸出。--> <root> <!--Windows事件日志--> <appender-ref ref="EventLogAppender" /> </root> </log4net>


?通過使用上面的配置文件可以將日志輸出到指定的類型中,可是想要輸出日志并不僅僅是使用上面的配置,另外須要在代碼中調用方法來記錄日志,詳細例如以下:

using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using log4net; using log4net.Appender;[assembly: log4net.Config.XmlConfigurator(Watch = true)] namespace ConsoleApplication1 {class Program{static void Main(string[] args){ILog log = log4net.LogManager.GetLogger(typeof(Program));//記錄錯誤日志log.Error("error", new Exception("發生了一個異常"));//記錄嚴重錯誤log.Fatal("fatal", new Exception("發生了一個致命錯誤"));//記錄一般信息log.Info("info");//記錄調試信息log.Debug("debug");//記錄警告信息log.Warn("warn");Console.WriteLine("日志記錄完成。

"); Console.Read(); } } }


? ? ? 在測試時上面的全部形式的配置輸出都能夠使用GetLogger方法來存儲存儲日志信息。

? ?Note:代碼中有這么一句:[assembly: log4net.Config.XmlConfigurator(Watch = true)](在須要使用log4net的類的namespace處),假設沒有這句就會在調試時得到例如以下留言中所說的“程序調試起來時isDebugEnable"的情況。

三、log4net保存NHibernate日志信息

? ? ? ?在使用NHibernate時經常須要分析SQL語句,可是NHibernate默認的是不輸出SQL Script的。那么如何才干查看它生成的SQL呢?最好還是使用下log4net吧,log4net能夠輸出NHibernate的執行情況。能夠通過配置來實現輸出全部Level的NHibernate的日志信息,詳細的配置方法例如以下,這里將配置文件放到了外置的xml中。<?

xml version="1.0" encoding="utf-8" ?> <log4net debug="true"> <appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net"> <param name="File" value="D:\log\log.txt"/> <param name="AppendToFile" value="false"/> <param name="RollingStyle" value="Date"/> <param name="StaticLogFileName" value="true"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /> </layout> </appender> <logger name="NHibernate" additivity="true"> <level value="ERROR"/> <appender-ref ref="DebugAppender" /> </logger> <logger name="NHibernate.SQL" additivity="true"> <level value="DEBUG"/> <appender-ref ref="DebugAppender" /> </logger> <logger name="NHibernate.AdoNet.AbstractBatcher" additivity="true"> <level value="DEBUG"/> <appender-ref ref="DebugAppender" /> </logger> <root> <!-- levels: DEBUG, INFO, WARN, ERROR, FATAL --> <level value="DEBUG"/> <level value="INFO"/> <level value="WARN"/> <level value="ERROR"/> <level value="FATAL "/> <appender-ref ref="rollingFile"/> </root> </log4net>


? ? 這里將log4net的配置信息放到了一個單獨的xml文件里。所以須要在執行時將配置信息加入到log4net的配置類中。它的配置往往在Global文件的Application_Start事件中加入配置,例如以下代碼:

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Security; using System.Web.SessionState; using Medici.Etam.Data.NHibernateSessionManagement; using NHibernate; using NHibernate.Context;namespace Medici.Etam.WebService {public class Global : System.Web.HttpApplication{private static log4net.ILog logger = log4net.LogManager.GetLogger("Logger");protected void Application_Start(object sender, EventArgs e){//if the log4net is a lone file then it should be configlog4net.XmlConfigurator.Configure(new FileInfo("D:\\Code\\Etam\\ETAM\\ETAM_Webservice_T16_V1.1\\Data\\log4net.cfg.xml")); }} }
? ?

結語

? ? log4net的日志存儲功能非常強大,它對日志信息做了具體的分類,總共劃分為5類。在存儲日志的時候能夠依據情況來選擇性的存儲,并依據級別選擇存儲方式。另外類似的這樣的日志框架還有NLog、CLog等,能夠依據具體的日志情況來選擇使用日志存儲的框架。

? ??

總結

以上是生活随笔為你收集整理的程序的记事本--log4net的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产第一福利影院 | 国产对白刺激视频 | 亚洲免费在线观看视频 | 亚洲欧美自拍另类 | 国产日韩一区 | 亚洲精品高清无码视频 | 久久123| 超碰在线视屏 | 欧美a在线视频 | 国产精品污污 | 噜噜狠狠狠狠综合久久 | wwwwww国产 | 一个人看的www片免费高清中文 | 国产无套内射又大又猛又粗又爽 | 欧美又大粗又爽又黄大片视频 | 欧美久久久久久久久久 | 最近更新中文字幕 | 另类亚洲激情 | 国产a毛片 | 五月天婷婷在线视频 | av一级大片| 综合激情婷婷 | 日中文字幕 | 亚洲黄色小说网 | 欧美特级黄色 | 97超碰自拍 | 5566毛片| 闷骚老干部cao个爽 av九九九 | 日韩免费片 | 亚洲最大黄色网址 | 欧美亚洲一级 | 国产一区二区三区精品在线观看 | 日本高清中文字幕 | 国产福利在线播放 | 亚洲av日韩av永久无码下载 | 国产一区二区不卡 | 国精产品一区一区三区 | 日韩草逼 | 欧美日韩专区 | a v视频在线播放 | 性欧美1819性猛交 | 亚洲一区久久久 | 爱的色放韩国电影 | 麻豆网站在线免费观看 | 国产污在线观看 | japanese国产| 国产女同视频 | av电影在线播放 | 国产日韩精品久久 | 青娱乐免费在线视频 | 日韩国产二区 | h片免费网站 | 国产精品成人69xxx免费视频 | 日一日射一射 | 在线国产不卡 | 成人毛片软件 | 国产不卡在线 | 香港三级韩国三级日本三级 | 国内av网站 | 91资源在线视频 | 中文字幕免费高 | 伊人久久大香网 | 国产伦精品一区二区三区四区视频 | 亚洲黄色大全 | 久草精品视频在线观看 | 久久久久久在线观看 | 裸体的日本在线观看 | 激情网五月 | 免费三级大片 | aaaaaa毛片 | 麻豆视频播放 | 国产精品自拍视频一区 | 欧洲成人综合 | 三大队在线观看 | 麻豆一二三区 | 国产成人在线观看网站 | 久久少妇网 | 成年人在线观看 | 国产精品福利导航 | 色婷婷综合久久久久中文字幕 | 超碰香蕉 | 男生操女生逼逼 | 日韩精品美女 | 精品少妇一区二区三区免费观 | 国产美女白浆 | 日本爽爽爽爽爽爽在线观看免 | a级黄色在线观看 | 91资源在线播放 | 一级特黄aa大片 | 黄色av免费观看 | 男男大尺度 | 亚洲最大成人网色 | 一级激情视频 | 日韩精品免费播放 | 日本一区二区三区精品视频 | 中文字幕一区二区三区精彩视频 | 欧美操穴视频 | 美女扒开大腿让男人桶 | 中文字幕乱妇无码av在线 |