日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第一节:框架前期准备篇之Log4Net日志详解

發(fā)布時間:2023/12/10 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第一节:框架前期准备篇之Log4Net日志详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一. Log4Net簡介

  Log4net是從Java中的Log4j遷移過來的一個.Net版的開源日志框架,它的功能很強(qiáng)大,可以將日志分為不同的等級,以不同的格式輸出到不同的存儲介質(zhì)中,比如:數(shù)據(jù)庫、txt文件、內(nèi)存緩沖區(qū)、郵件、控制臺、ANSI終端、遠(yuǎn)程接收端等等,我們這里主要介紹最常用的兩種:txt文件和數(shù)據(jù)庫。

(PS:其它的存儲介質(zhì)詳見 http://logging.apache.org/log4net/release/config-examples.html)

  Log4net將日志分為五個級別,分別是:?FATAL(致命錯誤) > ERROR(一般錯誤) > WARN(警告) > INFO(一般信息) > DEBUG(調(diào)試信息),每個級別都對應(yīng)著一組重載方法進(jìn)行調(diào)用。

  官網(wǎng)地址:http://logging.apache.org/log4net/index.html

  Nuget地址:https://www.nuget.org/packages/log4net/

  Nuget安裝:Install-Package log4net

  最新版本:2.0.8 (2018-08-09)

?  本節(jié)主要圍繞兩個主要的存儲介質(zhì):【txt文件】和【SQLServer數(shù)據(jù)庫】展開,涵蓋的知識點有:

    ①. 基本的使用步驟。

    ②. 初始化關(guān)聯(lián)配置文件的幾種形式。

    ③. 代碼調(diào)用詳解。

    ④. 配置文件詳解。

    ⑤. 簡單的封裝和在MVC框架中的調(diào)用。?

二. 基本使用步驟

?  我們先以控制臺程序為例,簡單介紹Log4net存儲日志到txt文本文檔中,后面在做代碼的詳解。

1. 新建01-SimpleDemo控制臺程序,通過指令 【Install-Package log4net】安裝相應(yīng)程序集。

2.??在默認(rèn)配置文件中App.config(B/S程序則為web.config)中進(jìn)行配置,主要分兩塊:

  A. 在<configuration></configuration>節(jié)點下新增節(jié)點下新增(要在其最頂部):

    <configSections>
      <section name = "log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />?
    </configSections>
  B. 在<configuration></configuration>根節(jié)點下,配置log4net的核心配置代碼, 主要節(jié)點如下:
    <log4net> <appender> </appender> <root></root> </log4net>

詳細(xì)代碼如下:

?View Code

3. 代碼調(diào)用

1 log4net.Config.XmlConfigurator.Configure(); 2 ILog log = LogManager.GetLogger("test"); 3 log.Debug("調(diào)試信息");

4. 運(yùn)行結(jié)果

截止此處,日志保存成功。

?

三. 初始化配置文件

  前面提到在默認(rèn)配置文件中App.config(B/S程序則為web.config)中進(jìn)行配置,可以通過代碼??log4net.Config.XmlConfigurator.Configure();?來初始化配置,或者還可以通過?[assembly: log4net.Config.XmlConfigurator()]??反射的形式進(jìn)行初始化配置,二者可以達(dá)到同樣的效果,代表了兩種初始化配置文件的形式。

  PS:?[assembly: log4net.Config.XmlConfigurator()]? 可以加在 當(dāng)前使用文件的 namespace上作用于當(dāng)前文件,或者加在Properties/AssemblyInfo.cs中,則該項目全局都無須再初始化了。

?

  在實際項目中,默認(rèn)的配置文件里可能包含很多框架的信息,這個時候把 log4net的配置代碼再放入進(jìn)去,就會顯得有點雜亂,或者有些“奇葩”的人把默認(rèn)配置文件改名了,這個時候使用上述默認(rèn)的兩種方式就不好用了,那么這種情況怎么處理呢?

  這里重點介紹 通過?log4net.Config.XmlConfigurator.Configure(); 來關(guān)聯(lián)配置文件。

情況一: 使用默認(rèn)配置文件的情況

  1. 代碼配置:log4net.Config.XmlConfigurator.Configure();

  2. 反射配置:[assembly: log4net.Config.XmlConfigurator()]?

?

情況二:修改默認(rèn)配置文件的名稱為:App1.config?(這里只是舉例,很少有修改默認(rèn)配置文件名稱的)

  1. 代碼配置: 首先將App1.config文件的屬性中的“生成操作”改為“?嵌入的資源”,然后通過以下代碼進(jìn)行配置。

1 Assembly assembly = Assembly.GetExecutingAssembly(); 2 var xml = assembly.GetManifestResourceStream("_01_SimpleDemo.App1.config"); 3 log4net.Config.XmlConfigurator.Configure(xml);

  注:代碼中的?_01_SimpleDemo 為命名空間名。

  2. 反射配置:[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.xml")]? ? ?

  注:用這種方式屬性中的:復(fù)制到輸出目錄需要改為:始終復(fù)制,生成操作不需要配置,使用默認(rèn):無? 即可

?

情況三:新建單獨(dú)xml文件,進(jìn)行l(wèi)og4net的配置 (推薦采用這種方式,和原配置文件區(qū)分開,單獨(dú)配置方便,處理方式和情況二是一致的)

  1. 代碼配置:首先將log4net.xml文件的屬性中的“生成操作”改為“?嵌入的資源”,然后通過以下代碼進(jìn)行配置。

1 Assembly assembly = Assembly.GetExecutingAssembly(); 2 var xml = assembly.GetManifestResourceStream("_01_SimpleDemo.log4net.xml"); 3 log4net.Config.XmlConfigurator.Configure(xml);

  注:代碼中的?_01_SimpleDemo 為命名空間名。

?

情況四:無論是修改默認(rèn)配置文件的名稱為 或者 新建單獨(dú)的xml作為配置文件 → 可以通過絕對路徑的方式進(jìn)行處理 【不推薦這種方式】

  1. 直接寫絕對路徑 (注意這種方式【不需要】配置文件屬性為 “嵌入的資源”)

1 log4net.Config.XmlConfigurator.Configure(new FileInfo(@"D:\06-我的開發(fā)之路\DotNet體系\05-DotNet框架篇\03-Log4net詳解\Code\01-SimpleDemo\log4net.xml"));

  2 通過代碼獲取絕對路徑 (注意這種方式【不需要】配置文件屬性的“生成操作”改為 “嵌入的資源”,但需要改為“始終復(fù)制”,確保輸出到bin文件下)

1 string assemblyFilePath = Assembly.GetExecutingAssembly().Location; 2 string assemblyDirPath = Path.GetDirectoryName(assemblyFilePath); 3 string configFilePath = assemblyDirPath + " //log4net.xml"; 4 log4net.Config.XmlConfigurator.Configure(new FileInfo(configFilePath));

PS:B/S程序下通過? log4net.Config.XmlConfigurator.Configure(new FileInfo(Server.MapPath("~") + @"/log4net.xml")); 來配置。

?

四. 代碼調(diào)用詳解

  Log4net允許多個ILog對象同時存在,通過代碼:ILog log = LogManager.GetLogger("xxx"); 來創(chuàng)建。

  A: 日志級別由高到低分別為:FATAL(致命錯誤) > ERROR(一般錯誤) > WARN(警告) > INFO(一般信息) > DEBUG(調(diào)試信息),另外還有 OFF和 ALL 。

  幾點說明:OFF表示所有信息都不寫入,ALL表示所有信息都寫入,我們也可以通過:<root><level value = "WARN" ></ level ></root>這樣配置,表示W(wǎng)ARN級別以及高于WARN以上的級別才會被寫入日志

  B: 寫入日志的方法有:Debug、Error、Fatal、Info、Warn五個方法,每個方法都有兩個重載,如下圖:

分享在使用配置文件為log4net.xml的情況下的調(diào)用代碼:

1 Assembly assembly = Assembly.GetExecutingAssembly();2 var xml = assembly.GetManifestResourceStream("_01_SimpleDemo.log4net.xml");3 log4net.Config.XmlConfigurator.Configure(xml);4 ILog log = LogManager.GetLogger("test");5 log.Debug("調(diào)試信息");6 log.Info("一般信息");7 log.Warn("警告");8 try9 { 10 int.Parse("ddd"); 11 } 12 catch (Exception ex) 13 { 14 log.Error("一般錯誤", ex); 15 } 16 log.Fatal("致命錯誤");

?

五. 配置文件詳解

  Log4net的配置文件主要分為兩大部分:分別是?【自定義配置節(jié)點】和 【核心代碼配置】,自定義配置節(jié)點代碼固定,如下圖,核心代碼配置主要位于:<log4net></log4net>節(jié)點中,里面包括<appender></appender>節(jié)點配置日日志輸出途徑 和 <root></root>節(jié)點,用于設(shè)置記錄日志的級別和啟用哪些輸出途徑。  

幾點說明:

1.? 自定義配置節(jié)點??<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> 代碼固定,直接復(fù)制即可。

2.? <root></root> 節(jié)點主要用來:?配置日志的的輸出級別和加載日志的輸出途徑。

  A:?level中的value值表示該值及其以上的日志級別才會輸出,日志級別包括:OFF > FATAL(致命錯誤) > ERROR(一般錯誤) > WARN(警告) > INFO(一般信息) > DEBUG(調(diào)試信息) > ALL ,比如:

    <level value="INFO"></level> 表示只有INFO及其以上的日志級別才會被保存。

  PS:OFF表示所有信息都不寫入,ALL表示所有信息都寫入。

  B:?<appender-ref></appender-ref>標(biāo)簽用于加載日志的輸出途徑代碼,通過ref和appender標(biāo)簽的中name屬性相關(guān)聯(lián),比如:

    <appender-ref ref="RollingFileAppender"></appender-ref> 表示開啟txt文檔保存日志的方式。

3. <appender></appender>節(jié)點,用來配置日志的輸出途徑的,本節(jié)主要介紹了輸出到 【txt文本文檔】中 和 【數(shù)據(jù)庫】。

 A:分享一下數(shù)據(jù)庫的表結(jié)構(gòu),詳細(xì)配置見下面的代碼分享,需要注意字段類型相匹配,并且要顯式指定其長度。

?

  B:關(guān)于txt文本文檔的命名,可以存放到一個文件夾里,也可以按照時間來區(qū)分文件夾,并且命名可以 動態(tài)+指定命名的方式。

  C:關(guān)于日志文件大小的說明和文件個數(shù)的說明,主要需要三個節(jié)點配合使用(實際開發(fā)中,如果一個txt特別大,打開的時候會非常的慢,卡頓,所以該步驟有必要配置一下)。

  PS:首先要配置?RollingStyle 節(jié)點為Size模式或者Composite模式,然后配置?maximumFileSize 節(jié)點設(shè)置每個文件的大小,最后配置?MaxSizeRollBackups 節(jié)點,設(shè)置日志文件的個數(shù)。超出大小后在所有文件名后自動增加正整數(shù)重新命名,數(shù)字最大的最早寫入。

  用下面的代碼簡單測試一下:

1 <param name="RollingStyle" value="Composite" /> 2 <param name="maximumFileSize" value="10KB" /> 3 <param name="MaxSizeRollBackups" value="5" />    ? 詳細(xì)代碼如下:

?

1 <?xml version="1.0" encoding="utf-8" ?>2 <configuration>3 <!-- 一. 添加log4net的自定義配置節(jié)點-->4 <configSections>5 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />6 </configSections>7 <!--二. log4net的核心配置代碼-->8 <log4net>9 <!--(一) 配置日志的輸出途徑-->10 <!--1. 輸出途徑(一) 將日志以回滾文件的形式寫到文件中-->11 <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">12 <!--1.1 文件夾的位置(也可以寫相對路徑)-->13 <param name="File" value="D:\MyLog1\" />14 <!--相對路徑 C/S程序生成在Debug目錄下-->15 <!--<param name="File" value="/Logs/" />-->16 <!--1.2 是否追加到文件-->17 <param name="AppendToFile" value="true" />18 <!--1.3 使用最小鎖定模型(minimal locking model),以允許多個進(jìn)程可以寫入同一個文件 -->19 <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />20 <!--1.4 配置Unicode編碼-->21 <Encoding value="UTF-8" />22 <!--1.5 是否只寫到一個文件里-->23 <param name="StaticLogFileName" value="false" />24 <!--1.6 配置按照何種方式產(chǎn)生多個日志文件 (Date:日期、Size:文件大小、Composite:日期和文件大小的混合方式)-->25 <param name="RollingStyle" value="Composite" />26 <!--1.7 介紹多種日志的的命名和存放在磁盤的形式-->27 <!--1.7.1 在根目錄下直接以日期命名txt文件 注意&quot;的位置,去空格 -->28 <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />29 <!--1.7.2 在根目錄下按日期產(chǎn)生文件夾,文件名固定 test.log -->30 <!--<param name="DatePattern" value="yyyy-MM-dd/&quot;test.log&quot;" />-->31 <!--1.7.3 在根目錄下按日期產(chǎn)生文件夾,這是按日期產(chǎn)生文件夾,并在文件名前也加上日期 -->32 <!--<param name="DatePattern" value="yyyyMMdd/yyyyMMdd&quot;-test.log&quot;" />-->33 <!--1.7.4 在根目錄下按日期產(chǎn)生文件夾,這再形成下一級固定的文件夾 -->34 <!--<param name="DatePattern" value="yyyyMMdd/&quot;OrderInfor/test.log&quot;" />-->35 <!--1.8 配置每個日志的大小。【只在1.6 RollingStyle 選擇混合方式與文件大小方式下才起作用!!!】可用的單位:KB|MB|GB。不要使用小數(shù),否則會一直寫入當(dāng)前日志,36 超出大小后在所有文件名后自動增加正整數(shù)重新命名,數(shù)字最大的最早寫入。-->37 <param name="maximumFileSize" value="10MB" />38 <!--1.9 最多產(chǎn)生的日志文件個數(shù),超過則保留最新的n個 將value的值設(shè)置-1,則不限文件個數(shù) 【只在1.6 RollingStyle 選擇混合方式與文件大小方式下才起作用!!!】39 與1.8中maximumFileSize文件大小是配合使用的-->40 <param name="MaxSizeRollBackups" value="5" />41 <!--1.10 配置文件文件的布局格式,使用PatternLayout,自定義布局-->42 <layout type="log4net.Layout.PatternLayout">43 <conversionPattern value="記錄時間:%date %n線程ID:[%thread] %n日志級別:%-5level %n出錯類:%logger property: [%property{NDC}] - %n錯誤描述:%message%newline %n%newline"/>44 </layout>45 </appender>46 47 <!--2. 輸出途徑(二) 記錄日志到數(shù)據(jù)庫-->48 <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">49 <!--2.1 設(shè)置緩沖區(qū)大小,只有日志記錄超設(shè)定值才會一塊寫入到數(shù)據(jù)庫-->50 <param name="BufferSize" value="1" />51 <!--2.2 引用-->52 <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />53 <!--2.3 數(shù)據(jù)庫連接字符串-->54 <connectionString value="data source=localhost;initial catalog=LogDB;integrated security=false;persist security info=True;User ID=sa;Password=123456" />55 <!--2.4 SQL語句插入到指定表-->56 <commandText value="INSERT INTO LogInfor ([threadId],[log_level],[log_name],[log_msg],[log_exception],[log_time]) VALUES (@threadId, @log_level, @log_name, @log_msg, @log_exception,@log_time)" />57 <!--2.5 數(shù)據(jù)庫字段匹配-->58 <!-- 線程號-->59 <parameter>60 <parameterName value="@threadId" />61 <dbType value="String" />62 <size value="100" />63 <layout type="log4net.Layout.PatternLayout">64 <conversionPattern value="%thread" />65 </layout>66 </parameter>67 <!--日志級別-->68 <parameter>69 <parameterName value="@log_level" />70 <dbType value="String" />71 <size value="100" />72 <layout type="log4net.Layout.PatternLayout">73 <conversionPattern value="%level" />74 </layout>75 </parameter>76 <!--日志記錄類名稱-->77 <parameter>78 <parameterName value="@log_name" />79 <dbType value="String" />80 <size value="100" />81 <layout type="log4net.Layout.PatternLayout">82 <conversionPattern value="%logger" />83 </layout>84 </parameter>85 <!--日志信息-->86 <parameter>87 <parameterName value="@log_msg" />88 <dbType value="String" />89 <size value="5000" />90 <layout type="log4net.Layout.PatternLayout">91 <conversionPattern value="%message" />92 </layout>93 </parameter>94 <!--異常信息 指的是如Infor 方法的第二個參數(shù)的值-->95 <parameter>96 <parameterName value="@log_exception" />97 <dbType value="String" />98 <size value="2000" />99 <layout type="log4net.Layout.ExceptionLayout" /> 100 </parameter> 101 <!-- 日志記錄時間--> 102 <parameter> 103 <parameterName value="@log_time" /> 104 <dbType value="DateTime" /> 105 <layout type="log4net.Layout.RawTimeStampLayout" /> 106 </parameter> 107 </appender> 108 <!--(二). 配置日志的的輸出級別和加載日志的輸出途徑--> 109 <root> 110 <!--1. level中的value值表示該值及其以上的日志級別才會輸出--> 111 <!--OFF > FATAL(致命錯誤) > ERROR(一般錯誤) > WARN(警告) > INFO(一般信息) > DEBUG(調(diào)試信息) > ALL --> 112 <!--OFF表示所有信息都不寫入,ALL表示所有信息都寫入--> 113 <level value="ALL"></level> 114 <!--2. append-ref標(biāo)簽表示要加載前面的日志輸出途徑代碼 通過ref和appender標(biāo)簽的中name屬性相關(guān)聯(lián)--> 115 <appender-ref ref="RollingFileAppender"></appender-ref> 116 <appender-ref ref="AdoNetAppender"></appender-ref> 117 </root> 118 </log4net> 119 120 </configuration>

?

?

六. 簡單的封裝及完整代碼分享

?  這里模擬在系統(tǒng)框架中對Log4net進(jìn)行簡單的封裝,然后在MVC框架中調(diào)用,并分享全部代碼。

  步驟一:新建Ypf.Utils類庫,作為工具類庫,引入log4net程序集,并將前面用到的log4net.xml 復(fù)制進(jìn)來,改屬性為嵌入資源,然后新建LogUtils類(不要起名為LogHelp),對Log4net的方法進(jìn)行簡單的封裝,主要包括:初始化代碼、ILog實例創(chuàng)建、五類日志級別的封裝。

  特別注意:這種封裝會帶來一個問題,會導(dǎo)致輸出的文件中出錯類永遠(yuǎn)顯示的為LogUtils這個封裝類,這里采用StackTrace類進(jìn)行迂回處理一下,就可以定位到具體的出錯位置了,如下圖:

?log4net.xml文件代碼如下:

?View Code

LogUtils類代碼如下

?View Code

步驟二:新建名Ypf.MVC的MVC5框架,添加對Ypf.Utils類庫的引用,在Global.asax全局文件中添加對 對Log4net進(jìn)行初始化。

  然后就可以愉快的進(jìn)行調(diào)用測試了哦。

?View Code

?

七. 補(bǔ)充:分文件存放

?  在前面的介紹中,忽略了一種情況,各種類型的日志(操作日志也好,錯誤日志也好)都存放在一個txt文檔里,在實際開發(fā)中很不方便,在這里介紹一種利用Log4net過濾器實現(xiàn)不同日志分文件夾存放的功能。

幾種過濾器,可以用來過濾掉Appender中的內(nèi)容:

  DenyAllFilter: 阻止所有的日志事件被記錄

  LevelMatchFilter: 只有指定等級的日志事件才被記錄

  LevelRangeFilter :日志等級在指定范圍內(nèi)的事件才被記錄

  LoggerMatchFilter: 與Logger名稱匹配,才記錄

  PropertyFilter: 消息匹配指定的屬性值時才被記錄

  StringMathFilter: 消息匹配指定的字符串才被記錄

?分文件夾存放的核心所在:

①. 配置文件的調(diào)整:利用LoggerMatchFilter和DenyAllFilter過濾器實現(xiàn)分文件存放。

?

②:聲明ILog對象的時候,需要與LoggerMatchFilter過濾器中的Value值相對應(yīng),才能保證該ILog對象記錄的日志存放到該Appender節(jié)點對應(yīng)的路徑下。

③. 高層調(diào)用:

?

分享一下log4net的配置文件和LogUtils的封裝文件。

?

1 <?xml version="1.0" encoding="utf-8" ?>2 <configuration>3 <!-- 一. 添加log4net的自定義配置節(jié)點-->4 <configSections>5 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />6 </configSections>7 <!--二. log4net的核心配置代碼-->8 <log4net>9 <!--1. 輸出途徑(一) 將日志以回滾文件的形式寫到文件中-->10 11 <!--模式一:全部存放到一個文件夾里-->12 <appender name="log0" type="log4net.Appender.RollingFileAppender">13 <!--1.1 文件夾的位置(也可以寫相對路徑)-->14 <param name="File" value="D:\MyLog\" />15 <!--相對路徑-->16 <!--<param name="File" value="Logs/" />-->17 <!--1.2 是否追加到文件-->18 <param name="AppendToFile" value="true" />19 <!--1.3 使用最小鎖定模型(minimal locking model),以允許多個進(jìn)程可以寫入同一個文件 -->20 <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />21 <!--1.4 配置Unicode編碼-->22 <Encoding value="UTF-8" />23 <!--1.5 是否只寫到一個文件里-->24 <param name="StaticLogFileName" value="false" />25 <!--1.6 配置按照何種方式產(chǎn)生多個日志文件 (Date:日期、Size:文件大小、Composite:日期和文件大小的混合方式)-->26 <param name="RollingStyle" value="Composite" />27 <!--1.7 介紹多種日志的的命名和存放在磁盤的形式-->28 <!--1.7.1 在根目錄下直接以日期命名txt文件 注意&quot;的位置,去空格 -->29 <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />30 <!--1.7.2 在根目錄下按日期產(chǎn)生文件夾,文件名固定 test.log -->31 <!--<param name="DatePattern" value="yyyy-MM-dd/&quot;test.log&quot;" />-->32 <!--1.7.3 在根目錄下按日期產(chǎn)生文件夾,這是按日期產(chǎn)生文件夾,并在文件名前也加上日期 -->33 <!--<param name="DatePattern" value="yyyyMMdd/yyyyMMdd&quot;-test.log&quot;" />-->34 <!--1.7.4 在根目錄下按日期產(chǎn)生文件夾,這再形成下一級固定的文件夾 -->35 <!--<param name="DatePattern" value="yyyyMMdd/&quot;OrderInfor/test.log&quot;" />-->36 <!--1.8 配置每個日志的大小。【只在1.6 RollingStyle 選擇混合方式與文件大小方式下才起作用!!!】可用的單位:KB|MB|GB。不要使用小數(shù),否則會一直寫入當(dāng)前日志,37 超出大小后在所有文件名后自動增加正整數(shù)重新命名,數(shù)字最大的最早寫入。-->38 <param name="maximumFileSize" value="10MB" />39 <!--1.9 最多產(chǎn)生的日志文件個數(shù),超過則保留最新的n個 將value的值設(shè)置-1,則不限文件個數(shù) 【只在1.6 RollingStyle 選擇混合方式與文件大小方式下才起作用!!!】40 與1.8中maximumFileSize文件大小是配合使用的-->41 <param name="MaxSizeRollBackups" value="5" />42 <!--1.10 配置文件文件的布局格式,使用PatternLayout,自定義布局-->43 <layout type="log4net.Layout.PatternLayout">44 <conversionPattern value="記錄時間:%date %n線程ID:[%thread] %n日志級別:%-5level %n出錯類:%logger property: [%property{NDC}] - %n錯誤描述:%message%newline %n%newline"/>45 </layout>46 </appender>47 48 <!--模式二:分文件夾存放-->49 <!--文件夾1-->50 <appender name="log1" type="log4net.Appender.RollingFileAppender">51 <param name="File" value="D:\MyLog\OneLog\" />52 <param name="AppendToFile" value="true" />53 <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />54 <Encoding value="UTF-8" />55 <param name="StaticLogFileName" value="false" />56 <param name="RollingStyle" value="Composite" />57 <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />58 <param name="maximumFileSize" value="10MB" />59 <param name="MaxSizeRollBackups" value="5" />60 <layout type="log4net.Layout.PatternLayout">61 <conversionPattern value="%message%newline" />62 </layout>63 <!--下面是利用過濾器進(jìn)行分文件夾存放,兩種過濾器進(jìn)行配合-->64 <!--與Logger名稱(OneLog)匹配,才記錄,-->65 <filter type="log4net.Filter.LoggerMatchFilter">66 <loggerToMatch value="OneLog" />67 </filter>68 <!--阻止所有的日志事件被記錄-->69 <filter type="log4net.Filter.DenyAllFilter" />70 </appender>71 <!--文件夾2-->72 <appender name="log2" type="log4net.Appender.RollingFileAppender">73 <param name="File" value="D:\MyLog\TwoLog\" />74 <param name="AppendToFile" value="true" />75 <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />76 <Encoding value="UTF-8" />77 <param name="StaticLogFileName" value="false" />78 <param name="RollingStyle" value="Composite" />79 <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />80 <param name="maximumFileSize" value="10MB" />81 <param name="MaxSizeRollBackups" value="5" />82 <layout type="log4net.Layout.PatternLayout">83 <conversionPattern value="%message%newline" />84 </layout>85 <!--下面是利用過濾器進(jìn)行分文件夾存放,兩種過濾器進(jìn)行配合-->86 <!--與Logger名稱(TwoLog)匹配,才記錄,-->87 <filter type="log4net.Filter.LoggerMatchFilter">88 <loggerToMatch value="TwoLog" />89 </filter>90 <!--阻止所有的日志事件被記錄-->91 <filter type="log4net.Filter.DenyAllFilter" />92 </appender>93 94 95 <!--2. 輸出途徑(二) 記錄日志到數(shù)據(jù)庫-->96 <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">97 <!--2.1 設(shè)置緩沖區(qū)大小,只有日志記錄超設(shè)定值才會一塊寫入到數(shù)據(jù)庫-->98 <param name="BufferSize" value="1" />99 <!--2.2 引用--> 100 <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 101 <!--2.3 數(shù)據(jù)庫連接字符串--> 102 <connectionString value="data source=localhost;initial catalog=LogDB;integrated security=false;persist security info=True;User ID=sa;Password=123456" /> 103 <!--2.4 SQL語句插入到指定表--> 104 <commandText value="INSERT INTO LogInfor ([threadId],[log_level],[log_name],[log_msg],[log_exception],[log_time]) VALUES (@threadId, @log_level, @log_name, @log_msg, @log_exception,@log_time)" /> 105 <!--2.5 數(shù)據(jù)庫字段匹配--> 106 <!-- 線程號--> 107 <parameter> 108 <parameterName value="@threadId" /> 109 <dbType value="String" /> 110 <size value="100" /> 111 <layout type="log4net.Layout.PatternLayout"> 112 <conversionPattern value="%thread" /> 113 </layout> 114 </parameter> 115 <!--日志級別--> 116 <parameter> 117 <parameterName value="@log_level" /> 118 <dbType value="String" /> 119 <size value="100" /> 120 <layout type="log4net.Layout.PatternLayout"> 121 <conversionPattern value="%level" /> 122 </layout> 123 </parameter> 124 <!--日志記錄類名稱--> 125 <parameter> 126 <parameterName value="@log_name" /> 127 <dbType value="String" /> 128 <size value="100" /> 129 <layout type="log4net.Layout.PatternLayout"> 130 <conversionPattern value="%logger" /> 131 </layout> 132 </parameter> 133 <!--日志信息--> 134 <parameter> 135 <parameterName value="@log_msg" /> 136 <dbType value="String" /> 137 <size value="5000" /> 138 <layout type="log4net.Layout.PatternLayout"> 139 <conversionPattern value="%message" /> 140 </layout> 141 </parameter> 142 <!--異常信息 指的是如Infor 方法的第二個參數(shù)的值--> 143 <parameter> 144 <parameterName value="@log_exception" /> 145 <dbType value="String" /> 146 <size value="2000" /> 147 <layout type="log4net.Layout.ExceptionLayout" /> 148 </parameter> 149 <!-- 日志記錄時間--> 150 <parameter> 151 <parameterName value="@log_time" /> 152 <dbType value="DateTime" /> 153 <layout type="log4net.Layout.RawTimeStampLayout" /> 154 </parameter> 155 </appender> 156 157 158 <!--(二). 配置日志的的輸出級別和加載日志的輸出途徑--> 159 <root> 160 <!--1. level中的value值表示該值及其以上的日志級別才會輸出--> 161 <!--OFF > FATAL(致命錯誤) > ERROR(一般錯誤) > WARN(警告) > INFO(一般信息) > DEBUG(調(diào)試信息) > ALL --> 162 <!--OFF表示所有信息都不寫入,ALL表示所有信息都寫入--> 163 <level value="ALL"></level> 164 <!--2. append-ref標(biāo)簽表示要加載前面的日志輸出途徑代碼 通過ref和appender標(biāo)簽的中name屬性相關(guān)聯(lián)--> 165 166 <!--<appender-ref ref="AdoNetAppender"></appender-ref>--> 167 <appender-ref ref="log0"></appender-ref> 168 <appender-ref ref="log1"></appender-ref> 169 <appender-ref ref="log2"></appender-ref> 170 </root> 171 </log4net> 172 173 </configuration>

?

?

1 using log4net;2 using System;3 using System.Collections.Generic;4 using System.Diagnostics;5 using System.Linq;6 using System.Reflection;7 using System.Text;8 using System.Threading.Tasks;9 10 namespace Ypf.Utils11 {12 public class LogUtils13 {14 //聲明文件夾名稱(這里分兩個文件夾)15 static string log1Name = "OneLog";16 static string log2Name = "TwoLog";17 18 //可以聲明多個日志對象19 //模式一:不分文件夾20 public static ILog log = LogManager.GetLogger(typeof(LogUtils));21 22 //模式二:分文件夾23 //如果是要分文件夾存儲,這里的名稱需要和配置文件中l(wèi)oggerToMatch節(jié)點中的value相配合24 //1. OneLog文件夾25 public static ILog log1 = LogManager.GetLogger(log1Name);26 //2. TwoLog文件夾27 public static ILog log2 = LogManager.GetLogger(log2Name);28 29 #region 01-初始化Log4net的配置30 /// <summary>31 /// 初始化Log4net的配置32 /// xml文件一定要改為嵌入的資源33 /// </summary>34 public static void InitLog4Net()35 {36 Assembly assembly = Assembly.GetExecutingAssembly();37 var xml = assembly.GetManifestResourceStream("Ypf.Utils.log4net.xml");38 log4net.Config.XmlConfigurator.Configure(xml);39 }40 #endregion41 42 /************************* 五種不同日志級別 *******************************/43 //FATAL(致命錯誤) > ERROR(一般錯誤) > WARN(警告) > INFO(一般信息) > DEBUG(調(diào)試信息)44 45 #region 00-將調(diào)試的信息輸出,可以定位到具體的位置(解決高層封裝帶來的問題)46 /// <summary>47 /// 將調(diào)試的信息輸出,可以定位到具體的位置(解決高層封裝帶來的問題)48 /// </summary>49 /// <returns></returns>50 private static string getDebugInfo()51 {52 StackTrace trace = new StackTrace(true);53 return trace.ToString();54 }55 #endregion56 57 #region 01-DEBUG(調(diào)試信息)58 /// <summary>59 /// DEBUG(調(diào)試信息)60 /// </summary>61 /// <param name="msg">日志信息</param>62 /// <param name="logName">文件夾名稱</param>63 public static void Debug(string msg, string logName = "")64 {65 if (logName == "")66 {67 log.Debug(getDebugInfo() + msg);68 }69 else if (logName == log1Name)70 {71 log1.Debug(msg);72 }73 else if (logName == log2Name)74 {75 log2.Debug(msg);76 }77 }78 /// <summary>79 /// Debug80 /// </summary>81 /// <param name="msg">日志信息</param>82 /// <param name="exception">錯誤信息</param>83 public static void Debug(string msg, Exception exception)84 {85 log.Debug(getDebugInfo() + msg, exception);86 }87 88 #endregion89 90 #region 02-INFO(一般信息)91 /// <summary>92 /// INFO(一般信息)93 /// </summary>94 /// <param name="msg">日志信息</param>95 /// <param name="logName">文件夾名稱</param>96 public static void Info(string msg, string logName = "")97 {98 if (logName == "")99 { 100 log.Info(getDebugInfo() + msg); 101 } 102 else if (logName == log1Name) 103 { 104 log1.Info(msg); 105 } 106 else if (logName == log2Name) 107 { 108 log2.Info(msg); 109 } 110 } 111 /// <summary> 112 /// Info 113 /// </summary> 114 /// <param name="msg">日志信息</param> 115 /// <param name="exception">錯誤信息</param> 116 public static void Info(string msg, Exception exception) 117 { 118 log.Info(getDebugInfo() + msg, exception); 119 } 120 #endregion 121 122 #region 03-WARN(警告) 123 /// <summary> 124 ///WARN(警告) 125 /// </summary> 126 /// <param name="msg">日志信息</param> 127 /// <param name="logName">文件夾名稱</param> 128 public static void Warn(string msg, string logName = "") 129 { 130 if (logName == "") 131 { 132 log.Warn(getDebugInfo() + msg); 133 } 134 else if (logName == log1Name) 135 { 136 log1.Warn(msg); 137 } 138 else if (logName == log2Name) 139 { 140 log2.Warn(msg); 141 } 142 } 143 /// <summary> 144 /// Warn 145 /// </summary> 146 /// <param name="msg">日志信息</param> 147 /// <param name="exception">錯誤信息</param> 148 public static void Warn(string msg, Exception exception) 149 { 150 log.Warn(getDebugInfo() + msg, exception); 151 } 152 #endregion 153 154 #region 04-ERROR(一般錯誤) 155 /// <summary> 156 /// ERROR(一般錯誤) 157 /// </summary> 158 /// <param name="msg">日志信息</param> 159 /// <param name="logName">文件夾名稱</param> 160 public static void Error(string msg, string logName = "") 161 { 162 if (logName == "") 163 { 164 log.Error(getDebugInfo() + msg); 165 } 166 else if (logName == log1Name) 167 { 168 log1.Error(msg); 169 } 170 else if (logName == log2Name) 171 { 172 log2.Error(msg); 173 } 174 } 175 /// <summary> 176 /// Error 177 /// </summary> 178 /// <param name="msg">日志信息</param> 179 /// <param name="exception">錯誤信息</param> 180 public static void Error(string msg, Exception exception) 181 { 182 log.Error(getDebugInfo() + msg, exception); 183 } 184 #endregion 185 186 #region 05-FATAL(致命錯誤) 187 /// <summary> 188 /// FATAL(致命錯誤) 189 /// </summary> 190 /// <param name="msg">日志信息</param> 191 /// <param name="logName">文件夾名稱</param> 192 public static void Fatal(string msg, string logName = "") 193 { 194 if (logName == "") 195 { 196 log.Fatal(getDebugInfo() + msg); 197 } 198 else if (logName == log1Name) 199 { 200 log1.Fatal(msg); 201 } 202 else if (logName == log2Name) 203 { 204 log2.Fatal(msg); 205 } 206 } 207 /// <summary> 208 /// Fatal 209 /// </summary> 210 /// <param name="msg">日志信息</param> 211 /// <param name="exception">錯誤信息</param> 212 public static void Fatal(string msg, Exception exception) 213 { 214 log.Fatal(getDebugInfo() + msg, exception); 215 } 216 217 #endregion 218 219 220 221 } 222 }

?

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的第一节:框架前期准备篇之Log4Net日志详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

亚洲精品资源在线 | 天天综合网在线观看 | av福利网址导航大全 | 久久久久国产一区二区 | 美女久久久久久久久久久 | 色一级片 | 久久少妇免费视频 | 天天激情站 | 日韩精品久久一区二区三区 | 97色婷婷人人爽人人 | 天天天天爽 | 伊人资源视频在线 | 国产激情电影综合在线看 | 福利一区在线 | 永久精品视频 | 四季av综合网站 | 中文字幕在线观看完整版 | 日韩午夜视频在线观看 | 国产短视频在线播放 | 亚洲永久在线 | 亚洲欧洲精品一区二区精品久久久 | 激情小说 五月 | 99久久久久久久久 | 不卡电影一区二区三区 | 欧美一区免费在线观看 | 国产不卡在线看 | 少妇bbb搡bbbb搡bbbb | 国产一区二区不卡在线 | 天天干.com | 一区二区三区不卡在线 | 亚洲在线成人精品 | 精品一二三区 | 九九热在线播放 | 色99色| 色射色 | 免费在线观看av网址 | 91女人18片女毛片60分钟 | www.天天干.com | 日日日日日 | 日日夜夜天天综合 | 日本精品在线视频 | 天天综合中文 | 欧美另类高潮 | 久久69精品久久久久久久电影好 | 久久国产综合视频 | 久草视频在线观 | 一区二区三区日韩精品 | 亚洲视频免费在线观看 | 久久黄色精品视频 | 人人干人人添 | 免费人成网ww44kk44 | 亚洲精品在线观看中文字幕 | 日日躁夜夜躁aaaaxxxx | 亚洲国产日韩av | 日韩女同一区二区三区在线观看 | 天天碰天天操 | 182午夜在线观看 | 欧美在线资源 | 91精选在线 | 成人h电影在线观看 | 日韩大片在线免费观看 | 免费在线电影网址大全 | 77国产精品| 午夜精品久久久久99热app | 欧美性生活小视频 | 一本一道久久a久久精品 | 粉嫩一区二区三区粉嫩91 | 国产精品视频免费在线观看 | 成人精品电影 | 日本精品视频免费 | 国产精品观看 | 粉嫩av一区二区三区四区五区 | 国产精品高清免费在线观看 | 天天拍天天操 | 欧美日韩亚洲一 | av色影院 | adc在线观看 | 天天爱天天色 | 伊人首页 | 国产成人在线播放 | 免费看片网站91 | 天天射天天操天天干 | 色五月激情五月 | 国产精品日韩 | 欧美日韩一级久久久久久免费看 | 精品少妇一区二区三区在线 | 国产成人黄色网址 | 欧美日韩中字 | av在线进入 | 国产成人精品aaa | 国产亚洲婷婷免费 | 国产精品第72页 | 福利视频 | 免费看日韩 | 亚洲激情p| av在线免费播放 | 免费在线播放黄色 | 福利一区二区在线 | 波多野结衣在线观看一区二区三区 | www.久久久.cum| 亚洲精品国产高清 | 欧美日韩国产三级 | 伊人超碰在线 | 国产一区二区高清 | 波多野结衣在线观看一区二区三区 | 人人爽人人爽人人爽学生一级 | 欧美a级一区二区 | 日韩av中文在线观看 | 国产一区高清在线观看 | 91精品秘密在线观看 | 91超碰免费在线 | 国产在线精品区 | 国产亚洲精品女人久久久久久 | 中文字幕在线高清 | 国产在线免费 | 久久久久久久久综合 | 午夜精品视频福利 | 国产精品精品久久久 | av网站免费看 | 午夜在线看片 | 97国产精品亚洲精品 | 欧美,日韩| 特级西西人体444是什么意思 | 在线精品视频在线观看高清 | 亚洲观看黄色网 | 在线国产视频 | 久久99国产精品二区护士 | 天天做日日做天天爽视频免费 | 丁香婷婷自拍 | 久久免费电影网 | 亚洲 成人 一区 | 九九视频在线 | 亚洲aⅴ乱码精品成人区 | 91精品秘密在线观看 | 91精品视频免费观看 | 美女网站在线观看 | 久久试看 | 久久不射网站 | 国产精品久久久久婷婷 | 激情综合网五月婷婷 | 欧美一二在线 | 久久久久亚洲国产精品 | 日韩av网站在线播放 | 九九免费在线观看 | 免费观看性生交大片3 | 天天操天天操天天操天天操天天操天天操 | 天天干天天操天天 | 激情综合色综合久久综合 | 丁香五月亚洲综合在线 | 国产视频亚洲视频 | 亚洲日本va午夜在线电影 | 欧日韩在线 | 国产精品一区二区免费视频 | 最新久久免费视频 | 日韩免费看 | 欧美一二三专区 | 超碰97久久| 欧美午夜a | 综合网天天射 | 欧美日韩在线观看视频 | 色窝资源| 99一级片 | 日本中文字幕在线播放 | 四虎成人精品 | 日韩一区二区三区观看 | 精品av网站 | 高清国产午夜精品久久久久久 | 国产精品区二区三区日本 | 国产高清视频免费 | 国产精品美女免费视频 | 国产精品自产拍在线观看中文 | 五月天久久久 | 在线观看免费视频你懂的 | 日本黄色黄网站 | 黄色精品一区二区 | 午夜精品久久久99热福利 | 久久精品永久免费 | 一区二区精品国产 | 91理论片午午伦夜理片久久 | 伊人春色电影网 | 中文在线字幕免费观 | 亚洲一区欧美激情 | 五月激情丁香婷婷 | 欧美一级片播放 | 久久精品国产亚洲精品2020 | 在线观看的a站 | 精品视频专区 | 精品av在线播放 | 99精品视频在线观看视频 | av丝袜天堂 | 中文字幕在线免费观看视频 | 国产精品久久久久久久久久东京 | 丁香婷婷综合激情五月色 | 亚洲五月婷 | 中文字幕美女免费在线 | 亚洲最快最全在线视频 | 精品国产视频在线观看 | 中文字幕专区高清在线观看 | 男女男视频 | 国产精品九九九 | 91资源在线免费观看 | 日韩欧美国产免费播放 | 五月婷婷一区 | 伊人色**天天综合婷婷 | 美女免费网站 | 国产亚洲精品成人av久久ww | 国产精品福利久久久 | 久久视频在线免费观看 | av三级av| 在线观看午夜av | 婷婷视频在线播放 | 欧美精品亚州精品 | 国产日韩精品一区二区在线观看播放 | 国产小视频在线免费观看 | 免费看的黄网站软件 | 天天操天天操天天操天天操天天操天天操 | 日韩精品中文字幕在线 | 狠狠躁夜夜av | 久草久草在线 | 99久久精品免费看国产免费软件 | 久草国产在线 | 美女视频黄频大全免费 | 国产成人一区二区精品非洲 | 亚洲精品免费在线 | 国产区精品区 | 激情综合网五月婷婷 | 日韩精品免费一区二区三区 | 亚洲精品一区中文字幕乱码 | 成人av免费在线播放 | 中文字幕在线免费看线人 | 91视频a| 91久久奴性调教 | 国产福利午夜 | 国产一区欧美一区 | 精品av网站 | 婷婷中文字幕综合 | 婷婷在线综合 | 久久成人人人人精品欧 | 在线99视频| 日本成人黄色片 | 欧洲激情综合 | 久久在线播放 | 国产色婷婷 | 色多多在线观看 | 欧美俄罗斯性视频 | 久久精品视频3 | 国产精品99久久免费黑人 | 日韩有码网站 | 爱情影院aqdy鲁丝片二区 | 欧美日韩在线视频免费 | 免费av的网站 | 高清av在线 | 久久不见久久见免费影院 | 又黄又爽的免费高潮视频 | 日韩欧美视频免费在线观看 | 国产小视频在线观看免费 | 激情小说网站亚洲综合网 | 五月天婷婷在线播放 | 日韩欧美有码在线 | 香蕉视频在线看 | 久久福利| 日本久久久久久久久久 | av免费在线网站 | 国产免费专区 | 国产成人一区二区三区 | 天天草天天干 | 中文字幕在线观看不卡 | 精品国产一区二区久久 | 在线观看成人小视频 | 日韩视频免费在线观看 | 亚洲成成品网站 | 欧美精品久久久久久 | 麻豆国产电影 | 黄色精品网站 | 欧美日韩调教 | 香蕉视频4aa | 香蕉视频国产在线 | 四虎影视成人永久免费观看亚洲欧美 | 中文在线字幕免费观 | 99久久婷婷国产精品综合 | 99国内精品 | 国产999久久久 | 在线免费黄色av | 亚州黄色一级 | 日本精品一区二区三区在线播放视频 | 国产一区电影在线观看 | 婷婷丁香色 | 成年人在线看片 | 一区二区精品视频 | 成人在线视频在线观看 | 国产一级电影在线 | 国产精品一区二区无线 | 最近中文字幕在线中文高清版 | 久久99欧美 | 91香蕉视频黄 | 在线观看网站av | 欧美日韩国产一区二区三区在线观看 | 国产精品成人在线观看 | 激情自拍av | 视频直播国产精品 | 久久草在线视频国产 | 日韩在线视频二区 | 亚洲,国产成人av | 91精品国产综合久久婷婷香蕉 | 亚洲天堂首页 | 久久久麻豆视频 | 国产福利免费看 | 国产999视频| 亚洲精品视频偷拍 | 久久五月婷婷丁香社区 | 人人狠狠综合久久亚洲婷 | 久久久久久久久久亚洲精品 | 国产精品午夜在线 | 日日草天天干 | 少妇超碰在线 | 欧美精品一区二区免费 | 黄视频色网站 | 在线播放国产精品 | 精品在线观看一区二区三区 | 蜜桃传媒一区二区 | 国产日本在线播放 | 97精品国产97久久久久久粉红 | 天天草网站 | 亚洲欧美日韩国产一区二区三区 | 国产原厂视频在线观看 | 日韩欧美区 | av观看久久久 | 日韩黄色软件 | 久久麻豆视频 | 欧美成人精品欧美一级乱黄 | 五月天综合网 | www.国产在线观看 | 日韩精品字幕 | 一区二区三区动漫 | 日韩区欠美精品av视频 | 国产成人精品一区二区 | 黄色三级久久 | 国产无套精品久久久久久 | 精品日韩视频 | 黄色免费观看网址 | 国产色婷婷 | 亚洲人在线 | 69夜色精品国产69乱 | 日韩亚洲国产中文字幕 | 久久国产精品免费视频 | japanesefreesex中国少妇 | 久久精品久久久久电影 | 久久69精品久久久久久久电影好 | 一区二区三区高清在线观看 | 99re中文字幕 | 狠狠干美女 | 在线观看你懂的网址 | 国产综合激情 | 99热这里精品| 国产91精品一区二区麻豆亚洲 | 久久麻豆视频 | 日韩色区 | 国产午夜激情视频 | 免费视频久久久久久久 | 91精品推荐 | 久久综合久久伊人 | 日韩 在线| 欧美不卡视频在线 | 午夜久久影院 | 日本bbbb摸bbbb| 超碰免费观看 | av中文字幕网站 | 久久69精品 | 综合色站| 日本中文在线 | 狠狠色丁香| 日日碰狠狠添天天爽超碰97久久 | 欧美日韩在线第一页 | 国产精品涩涩屋www在线观看 | 国产永久免费观看 | 国产精品高潮呻吟久久av无 | 在线一区电影 | 亚洲伦理一区 | 亚洲精品视频大全 | 国精产品永久999 | 一区二区三区四区免费视频 | 国产精品成人一区二区 | 麻豆视频免费入口 | 99色精品视频 | 国产伦精品一区二区三区照片91 | 午夜精品久久 | 久久丁香网 | 亚洲精品乱码久久久久久蜜桃不爽 | 久久免费看a级毛毛片 | 视频一区二区视频 | 国产精品黄色 | 国产在线成人 | 500部大龄熟乱视频使用方法 | 久久9999久久免费精品国产 | 亚洲国产精品va在线看黑人动漫 | 久久艹久久 | 玖玖在线播放 | 韩国一区二区三区视频 | se婷婷 | 亚洲国产网站 | 国产小视频福利在线 | 中文字幕精品在线 | 亚洲日本韩国一区二区 | 在线观看岛国av | 激情综合五月婷婷 | 成人一区二区三区在线 | 国产最新在线视频 | 亚洲精品国产精品国自产 | 欧美日韩观看 | 国产在线观看,日本 | 美女在线免费视频 | av高清免费在线 | 一级理论片在线观看 | 在线之家免费在线观看电影 | 亚洲最新在线视频 | 日本在线中文 | 久久综合狠狠综合久久激情 | 韩国av免费| 天天爽夜夜爽精品视频婷婷 | 欧美午夜精品久久久久 | 国产精品久久久久久久久久久免费看 | av免费网站在线观看 | 欧美精品一区二区在线播放 | 在线播放一区二区三区 | 精品久久久网 | 99久久精品一区二区成人 | 国产免费一区二区三区最新 | 欧美va天堂va视频va在线 | av免费在线观看1 | a级片韩国| 爱爱av网 | 欧美成人精品三级在线观看播放 | av中文字幕网站 | 国产在线精品福利 | 一区二区精品久久 | 精品久久久久国产免费第一页 | 欧美韩国日本在线观看 | www.国产精品| 久久久久国产精品免费免费搜索 | 婷婷亚洲最大 | 久久精品观看 | 欧美十八 | 国产一区二区网址 | 麻豆影视网 | 国内综合精品午夜久久资源 | 亚洲精品午夜久久久久久久 | 色婷婷导航 | 欧美午夜久久久 | 国产一区欧美一区 | 日日干网| 麻豆av电影| 蜜臀一区二区三区精品免费视频 | 在线观看91视频 | 亚洲精品国产精品国自产在线 | 久久超碰免费 | 亚洲专区欧美 | 亚洲精品在线电影 | 日本三级全黄少妇三2023 | 99精品国产99久久久久久97 | 日韩字幕在线观看 | 免费看三级网站 | 黄色网大全 | 国产精品久久久一区二区三区网站 | 综合网欧美 | 精品国产黄色片 | 五月天中文在线 | 伊人久操 | 久久夜夜爽 | 精品在线99 | 日日夜夜天天综合 | 久久高清毛片 | 久久情爱 | 狠狠久久综合 | 久草精品视频 | 中文字幕在线免费观看 | 国内精品视频免费 | 中文字幕欧美三区 | 免费在线观看av网址 | 国产系列 在线观看 | 亚洲伊人网在线观看 | 久久综合色天天久久综合图片 | 丝袜足交在线 | 中文字幕在线播放一区二区 | 亚洲永久精品在线 | 欧美激情视频免费看 | 成年人免费看片 | 久久久久www | 欧美日韩精品在线 | 中文av一区二区 | 国内精品久久久久久久 | 中文字幕一区二区三区在线观看 | 国产精品一区二区免费视频 | 国产91全国探花系列在线播放 | 国产在线观看黄 | 日韩av进入| 天天鲁一鲁摸一摸爽一爽 | 日韩在线国产精品 | 在线中文字幕av观看 | 国产精品 日韩精品 | 久久综合免费视频影院 | 欧美日韩精 | 你操综合 | 亚州精品国产 | 91视频 - 114av | 美女网站在线免费观看 | 亚洲精品免费看 | 国产精品av久久久久久无 | 免费的国产精品 | 中文字幕久久久精品 | 久久久久国产一区二区 | 国产色影院 | 日韩一区二区久久 | 日本黄色免费网站 | 国产中文字幕在线看 | www.夜夜骑.com | 深爱五月激情网 | 欧美日韩高清不卡 | 欧美一级视频一区 | 午夜一级免费电影 | 久久综合狠狠综合久久激情 | 久 久久影院 | 亚洲精品女人久久久 | 免费在线观看成人 | 福利一区在线 | 午夜av电影院 | 91传媒免费在线观看 | 久久精品小视频 | 手机看片午夜 | 天天摸天天操天天爽 | 免费高清影视 | 成人国产精品 | 日韩在线视频一区二区三区 | 亚洲精品免费在线观看视频 | 超碰com| 国外调教视频网站 | 日韩精品中文字幕在线观看 | 一区二区三区久久 | 探花视频免费观看 | 三级免费黄色 | 最新日韩中文字幕 | 天天操天天射天天添 | 久久午夜电影 | 久久综合网色—综合色88 | 美女视频免费精品 | 国产日产欧美在线观看 | 日韩欧美精选 | 亚洲午夜久久久久久久久 | 免费精品在线观看 | 日韩 精品 一区 国产 麻豆 | 在线99视频 | 国产黄色成人 | 亚洲高清视频在线观看 | 免费av观看 | 久综合网 | 亚洲精品欧美专区 | 天天曰夜夜爽 | 干干日日| 亚洲欧美乱综合图片区小说区 | 欧洲av不卡 | 一色屋精品视频在线观看 | 狠狠的干狠狠的操 | 欧美一级在线 | 日本久久影视 | 亚洲高清视频在线观看免费 | 日韩视频一区二区三区 | 成人一级片免费看 | 91人人在线| 人人看人人做人人澡 | 成年人免费在线观看网站 | 国产午夜亚洲精品 | 成人av一区二区兰花在线播放 | 久久理论影院 | 国产毛片久久久 | 久久婷亚洲五月一区天天躁 | 午夜的福利 | 欧美综合在线视频 | 中文字幕av有码 | 91桃色在线观看视频 | 国产成人专区 | 国产一级电影免费观看 | 麻豆网站免费观看 | 91亚洲精品久久久 | 久久艹欧美 | 久久黄色成人 | 九九欧美| 91中文字幕在线视频 | 超碰在线99| 亚洲精品99久久久久中文字幕 | 日韩性久久 | 久久不卡日韩美女 | 国产美女视频免费 | 久久久久欧美精品 | 美女视频是黄的免费观看 | 久青草电影 | a久久久久 | 国产精品视频专区 | 91久久国产露脸精品国产闺蜜 | 男女激情片在线观看 | 亚洲成人资源 | 狠狠干狠狠操 | www亚洲视频 | 久久久久亚洲精品中文字幕 | 99久久久国产精品 | 色99视频 | 91超碰免费在线 | 伊色综合久久之综合久久 | 国产理论片在线观看 | 国产一级淫片免费看 | 午夜精品久久一牛影视 | 久久99国产视频 | 午夜天使| 免费久久片 | 精品国产a | 国产精品久久久久久久久久直播 | 成年美女黄网站色大片免费看 | 日本色小说视频 | 日韩和的一区二在线 | 久久久国产一区二区 | 中文字幕999 | 夜又临在线观看 | av资源网在线播放 | 免费亚洲黄色 | 欧美天天综合 | 色永久免费视频 | 精产嫩模国品一二三区 | 免费成人av网站 | 91亚洲精品久久久蜜桃网站 | 香蕉视频网址 | 国产视频欧美视频 | 一区三区视频在线观看 | 在线观看免费一级片 | 国产在线观看99 | 久久精品福利视频 | 久久久久99精品成人片三人毛片 | 中文字幕在线一二 | 久草在线免费资源站 | 亚洲在线网址 | 亚洲一区二区精品3399 | 亚洲精品视频二区 | 成人在线播放视频 | 久久超级碰视频 | 成年人免费在线播放 | 国产精品欧美在线 | 三级黄色免费片 | 丁香花在线观看视频在线 | 婷婷激情网站 | 久久久综合香蕉尹人综合网 | 国产精品久久久久久久久软件 | 亚在线播放中文视频 | 久久综合九色综合久久久精品综合 | 激情综合亚洲 | 精品久久久国产 | 久久在线一区 | 日韩伦理一区二区三区av在线 | 在线观看国产日韩欧美 | 福利视频导航网址 | 激情五月在线视频 | 免费av大片 | 免费高清国产 | 亚洲麻豆精品 | 日韩免费观看一区二区三区 | 成人在线小视频 | 国产精品一区一区三区 | 人人玩人人弄 | 亚洲六月丁香色婷婷综合久久 | 国产精品女同一区二区三区久久夜 | 丁香六月天 | 九色精品免费永久在线 | 美州a亚洲一视本频v色道 | 综合色在线观看 | 在线观看成人网 | 久热香蕉视频 | 久久久久久久影视 | 一区二区视频在线播放 | 成人黄色电影在线观看 | 国产精品久久久久久久久久免费看 | 久久综合免费视频 | 成人免费视频网站在线观看 | 欧美久久久久久久久久久久久 | 日韩欧美99| 91一区一区三区 | 91在线91拍拍在线91 | 最近中文字幕免费av | 中文字幕免费在线 | 黄色片网站av| 欧美色噜噜噜 | 久草网视频 | 久久99久久精品国产 | 亚洲免费成人av电影 | 欧美成人tv | 亚洲影视九九影院在线观看 | 亚洲精品在线观看不卡 | 人人看人人做人人澡 | 国产一区视频在线观看免费 | 久久久九九 | 国产精品一区二区免费在线观看 | 九七视频在线观看 | 国产精品久久久久婷婷二区次 | 亚洲国产精品va在线看黑人动漫 | 天天操,夜夜操 | 黄p网站在线观看 | 日日碰狠狠躁久久躁综合网 | 国产成人99av超碰超爽 | 久久你懂的 | 亚洲午夜久久久综合37日本 | 激情视频一区二区三区 | 992tv人人草 黄色国产区 | 国产色影院 | 四虎成人精品在永久免费 | 日韩免费小视频 | 日韩欧美一区二区三区视频 | 香蕉视频网站在线观看 | a黄色 | 国产午夜麻豆影院在线观看 | 日韩一区二区三区高清免费看看 | 久久精品视频免费 | 97成人资源| 亚洲最大的av网站 | 亚洲激情 在线 | 韩日精品在线观看 | 黄色成年片 | 国产成人中文字幕 | 久久刺激视频 | 99人成在线观看视频 | 国产特级毛片aaaaaa高清 | 国产精品一区二区三区视频免费 | 精品国产欧美一区二区三区不卡 | 日本在线视频一区二区三区 | 国产精品久久久久久久久久久免费 | 一区二区欧美激情 | 国产精品嫩草影院99网站 | 亚洲午夜精品在线观看 | 91av视频网| 毛片视频网址 | 国产91精品欧美 | 久久精品国产99国产 | 久久综合狠狠综合 | 久久视频在线看 | 亚洲男男gaygayxxxgv | 成人免费视频网站 | 国产视| 天天天天天天天天操 | 亚洲va欧美va人人爽春色影视 | 国产区精品 | 久久久久久久久黄色 | 国产精品1区2区3区 久久免费视频7 | 97超碰在线视 | 成年人网站免费观看 | 色综合久久天天 | 免费网站在线观看人 | 奇米影视999| 欧美精品v国产精品 | 黄色一区二区在线观看 | 国产不卡av在线 | 色视频成人在线观看免 | 久久久久久久久久久久亚洲 | 国产亚洲一级高清 | 99热播精品 | 国产精品一区二区美女视频免费看 | 91探花在线视频 | 欧美一级爽 | 久久久午夜视频 | 成人av一级片 | 国产精品免费一区二区 | 国产一级免费片 | 午夜91在线 | 久久99亚洲精品 | 四虎免费在线观看视频 | 欧美人交a欧美精品 | 亚洲丁香久久久 | 五月婷婷电影网 | 91久久奴性调教 | 久久久久成人精品亚洲国产 | 国产美女在线观看 | 福利久久久 | 黄色成人91 | 天天操天天操天天操天天操 | 黄色在线成人 | 天天在线操 | 久久久九色精品国产一区二区三区 | 精品一区二区三区在线播放 | 亚洲国产精品推荐 | 国产午夜精品av一区二区 | 91香蕉视频污在线 | 在线观看激情av | 日韩一级黄色大片 | 久 久久影院 | 女人18毛片90分钟 | 日韩欧美在线视频一区二区 | 日韩精品久久一区二区 | 九九激情视频 | 国产精品自在线拍国产 | 97超碰资源网 | 91网页版在线观看 | 中文av在线天堂 | 欧美精品乱码久久久久久按摩 | 国内精品久久久 | 亚洲国产成人在线播放 | 日韩在线观看精品 | 亚洲精品影院在线观看 | 国产精品国产三级在线专区 | 91视频-88av | www最近高清中文国语在线观看 | 亚洲欧美乱综合图片区小说区 | 韩国在线视频一区 | 国产黄在线观看 | 中文字幕丝袜一区二区 | 91福利在线观看 | 亚洲欧美国产日韩在线观看 | 成人免费精品 | 色婷婷a| 国产精品99久久久久久宅男 | 免费在线黄 | 黄色三级免费 | 天天插日日射 | 日本一区二区高清不卡 | av在线网站大全 | 3d黄动漫免费看 | 手机在线黄色网址 | 在线观看视频国产 | 精品国自产在线观看 | 亚洲dvd| 欧美日韩国产成人 | 米奇狠狠狠888 | 国产成人久久精品亚洲 | 俺要去色综合狠狠 | 一本一道波多野毛片中文在线 | 狠狠狠操 | 在线91视频 | 国产日韩精品一区二区在线观看播放 | 精品1区2区3区 | 三上悠亚一区二区在线观看 | 久草免费在线视频观看 | 成年人免费看片网站 | 91av原创 | 日韩视频在线不卡 | 久久黄色成人 | 亚洲欧洲日韩在线观看 | 久久国产亚洲视频 | 精品久久久久久久久久 | 成人cosplay福利网站 | 婷婷色六月天 | 免费观看一区二区 | 四虎在线永久免费观看 | 午夜电影一区 | 天天干夜夜爱 | 五月天婷婷狠狠 | 久久爱资源网 | 免费看污片 | 夜夜躁狠狠躁日日躁视频黑人 | 超碰97国产精品人人cao | 激情婷婷六月 | 精品亚洲欧美一区 | 欧美激情第28页 | 久久成电影 | 欧美夫妻性生活电影 | 国产69精品久久久久久久久久 | 国产午夜精品福利视频 | 久久影院精品 | 午夜999| 国产真实在线 | 亚洲精品国产精品乱码在线观看 | www.久久91 | 精品欧美一区二区精品久久 | 99热这里只有精品国产首页 | 蜜臀av麻豆 | 亚洲欧美怡红院 | 91成人午夜 | 日韩毛片在线免费观看 | 精品国产乱码一区二区三区在线 | 成人一级在线 | 久久久久综合 | 天天色天天射天天综合网 | 欧美性久久久 | 国产精品无av码在线观看 | av高清在线 | 久久久久久久久久伊人 | 国产日韩欧美在线一区 | 国产福利91精品一区二区三区 | 激情五月婷婷丁香 | 国产123av| 91视频免费看 | 国产美女视频免费 | 久久99国产综合精品免费 | 99精品一区二区三区 | 成人黄色大片在线观看 | 亚洲91精品 | 久久精品视频网址 | 婷婷久久网 | 成人免费大片黄在线播放 | 亚洲精品美女 | 天天操狠狠操夜夜操 | 久久精品网站免费观看 | 美女视频网站久久 | 欧美成人在线免费 | 色婷婷婷 | 亚洲综合欧美激情 | 色婷婷激情网 | 精品伊人久久久 | 中文字幕在线播放第一页 | 国产123区在线观看 国产精品麻豆91 | 国产二区精品 | 成人午夜电影网 | 狠狠干免费 | 免费看三级 | 综合网天天色 | 91精品中文字幕 | 日韩精品无 | 精品在线一区二区三区 | 欧日韩在线视频 | 国产成人久久av | 在线观看一级视频 | 中文字幕av在线不卡 | 免费av观看网站 | 国产亚洲精品美女久久 | 成人视屏免费看 | 少妇av片 | 99精品亚洲| 黄在线免费看 | 国产视| 久久激情视频免费观看 | 97超碰.com| 狠狠狠狠狠狠天天爱 | 最新久久久 | 国产一区二区在线免费播放 | 久久久免费精品国产一区二区 | av黄色免费在线观看 | 久久视频在线免费观看 | 高清视频一区二区三区 | 欧美日韩观看 | 国产精品久久久免费看 | 亚洲欧美婷婷六月色综合 | 日p视频在线观看 | 久久人人看| 国产精品亚洲片夜色在线 | 久久久精品免费看 | 国产精品v欧美精品v日韩 | 97在线影院| 狠狠干天天色 | 久久影院一区 | 国产剧情一区二区 | 香蕉精品视频在线观看 | 激情影院在线 | 福利视频网址 | ww亚洲ww亚在线观看 | 亚洲激情 | 久久免费中文视频 | 欧美精品被 | 久久看视频 | 欧美日韩在线免费观看 | 特级黄色一级 | 视频国产在线 | 久久久久久久久久久久电影 | 精品一二三区视频 | 天天做天天爱天天综合网 | 三上悠亚一区二区在线观看 | 亚洲精品自拍视频在线观看 | 精品在线免费观看 | 国产视频一区在线 | 久艹在线免费观看 | 日韩理论片中文字幕 | 色噜噜狠狠色综合中国 | 五月婷婷六月丁香激情 | 五月婷网站 | 日本一区二区高清不卡 | 国产在线视频一区二区三区 | 九9热这里真品2 | 欧美日韩在线观看一区二区三区 | 天天爱综合 | 9久久精品 | 色婷婷久久 | 一区二区三区四区五区在线 | 色香蕉视频 | 亚洲视屏 | 日免费视频 | 成人午夜网| 在线观看视频97 | 亚洲国产剧情av | 911av视频| 天天综合网国产 | 日本久久电影网 | 国产私拍在线 | 天天视频色版 | 免费在线观看不卡av | av大全在线播放 | 国产一级电影免费观看 | 久久精品视频播放 | 国产精品精品久久久久久 | 91av短视频| 色综合天天 | 久久免费视频这里只有精品 | 亚洲精品激情 | 国产精品乱码久久久 | 亚洲精品va | 国产亚洲精品成人av久久ww | 91黄色在线观看 | 国产一级片播放 | 欧美日韩高清 |