3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

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

编程问答

log4cplus指南

發(fā)布時間:2024/8/1 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 log4cplus指南 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

log4cplus指南

1 Log4cplus簡介

   log4cplus是C++編寫的開源的日志系統(tǒng),前身是java編寫的log4j系統(tǒng),受Apache Software License保護(hù),作者是Tad E. Smith。
   log4cplus具有線程安全、靈活、以及多粒度控制的特點(diǎn),通過將日志劃分優(yōu)先級使其可以面向程序調(diào)試、運(yùn)行、測試、和維護(hù)等全生命周期。你可以選擇將日志輸出到屏幕、文件、NT event log、甚至是遠(yuǎn)程服務(wù)器;通過指定策略對日志進(jìn)行定期備份等等。

2 安裝方法

  • 1- 解壓: gzip -cd log4cplus-x.x.x.tar.gz | tar -xf -
  • 2- 進(jìn)入log4cplus根目錄: cd log4cplus-x.x.x
  • 3- 產(chǎn)生Makefile: ./configure –prefix=/where/to/install –enable-threads=no
       如果需要指定安裝路徑可使用–prefix參數(shù), 否則將缺省安裝到/usr/local目錄下。另外,如果需要單線程版本可通過參數(shù)-enable-threads=no指定, 否則默認(rèn)將安裝多線程版本。
       對于HP-UNIX平臺用戶, 由于aCC編譯器選項(xiàng)兼容性問題,請另外加入?yún)?shù)CXXFLAGS=”-AA -w”(單線程版本)或CXXFLAGS=”-AA –mt -w”(多線程版本)。
  • 4- 創(chuàng)建: make
       對于HP-UNIX用戶,由于aCC編譯器不包含-Wall選項(xiàng)來顯示所有警告,創(chuàng)建時將導(dǎo)致無效的-W參數(shù)錯誤,請修改/log4cplus-x.x.x/src目錄下的Makefile,將AM_CPPFLAGS = -Wall 行的-Wall選項(xiàng)刪除或注釋掉。
       此外,某些HP-UNIX平臺的套接字連接接受函數(shù)accept()第三個參數(shù)要求為int*,而在socket-unix.cxx源文件153行實(shí)現(xiàn)中實(shí)際傳入的是socklen_t*類型,平臺并不支持,也將導(dǎo)致編譯錯誤。解決方法是將源代碼該行中的傳入?yún)?shù)強(qiáng)制轉(zhuǎn)換為int*類型即可。
       注意AIX和Linux平臺目前并沒有上述兩處創(chuàng)建錯誤。
       對于AIX平臺用戶請保證創(chuàng)建時使用的編譯器是xlC而不是g++,否則將導(dǎo)致log4cplus腳本配置功能運(yùn)行時產(chǎn)生段異常,生成core文件。有鑒于此,也請保證HP-UNIX用戶盡量使用aCC編譯器進(jìn)行創(chuàng)建。
  • 5- 創(chuàng)建/log4cplus/tests目錄下的測試用例: make check
  • 6- 安裝: make install
    安裝成功后將在/usr/local目錄或指定的目錄下創(chuàng)建include和lib兩個子目錄及相應(yīng)文件。其中include目錄包含頭文件,lib目錄包含最終打包生成的靜態(tài)和動態(tài)庫。在動態(tài)連接log4cplus庫時請使用-llog4cplus選項(xiàng)。

3 主要類說明

類名 說明
Filter 過濾器,過濾輸出消息。
Layout 布局器,控制輸出消息的格式。
Appender 掛接器,與布局器和過濾器緊密配合,將特定格式的消息過濾后輸出到所掛接的設(shè)備終端如屏幕,文件等等)。
Logger 記錄器,保存并跟蹤對象日志信息變更的實(shí)體,當(dāng)你需要對一個對象進(jìn)行記錄時,就需要生成一個logger。
Hierarchy 分類器,層次化的樹型結(jié)構(gòu),用于對被記錄信息的分類,層次中每一個節(jié)點(diǎn)維護(hù)一個logger的所有信息。
LogLevel 優(yōu)先權(quán),包括TRACE, DEBUG, INFO, WARNING, ERROR, FATAL。

4 基本使用

4.1 基本步驟

   使用log4cplus有六個基本步驟:
實(shí)例化一個封裝了輸出介質(zhì)的appender對象;
實(shí)例化一個封裝了輸出格式的layout對象;
將layout對象綁定(attach)到appender對象;
   如省略此步驟,簡單布局器SimpleLayout(參見5.1小節(jié))對象會綁定到logger。
實(shí)例化一個封裝了日志輸出logger對象,并調(diào)用其靜態(tài)函數(shù)getInstance()獲得實(shí)
  例,log4cplus::Logger::getInstance(“l(fā)ogger_name”);
將appender對象綁定(attach)到logger對象;
設(shè)置logger的優(yōu)先級,如省略此步驟,各種有限級的日志都將被輸出。

4.2 使用示例

   下面通過一些例子來了解log4cplus的基本使用。

4.2.1 例1-標(biāo)準(zhǔn)使用

/**標(biāo)準(zhǔn)使用,嚴(yán)格實(shí)現(xiàn)步驟1-6。*/ #include <log4cplus/logger.h> #include <log4cplus/consoleappender.h> #include <log4cplus/layout.h>using namespace log4cplus; using namespace log4cplus::helpers;int main() {/* step 1: Instantiate an appender object */SharedObjectPtr<Appender> _append (new ConsoleAppender());_append->setName("append for test");/* step 2: Instantiate a layout object */std::string pattern = "%d{%m/%d/%y %H:%M:%S} - %m [%l]%n";std::auto_ptr<Layout> _layout(new PatternLayout(pattern));/* step 3: Attach the layout object to the appender */_append->setLayout( _layout );/* step 4: Instantiate a logger object */Logger _logger = Logger::getInstance("test");/* step 5: Attach the appender object to the logger */_logger.addAppender(_append);/* step 6: Set a priority for the logger */_logger.setLogLevel(ALL_LOG_LEVEL);/* log activity */LOG4CPLUS_DEBUG(_logger, "This is the FIRST log message...")sleep(1);LOG4CPLUS_WARN(_logger, "This is the SECOND log message...")return 0; }

輸出結(jié)果:

10/14/04 09:06:24 - This is the FIRST log message... [main.cpp:31] 10/14/04 09:06:25 - This is the SECOND log message... [main.cpp:33]

4.2.2 例2-簡潔使用

/**簡潔使用,僅實(shí)現(xiàn)步驟1、4、5。*/ #include <log4cplus/logger.h> #include <log4cplus/consoleappender.h>using namespace log4cplus; using namespace log4cplus::helpers;int main() {/* step 1: Instantiate an appender object */SharedAppenderPtr _append(new ConsoleAppender());_append->setName("append test");/* step 4: Instantiate a logger object */Logger _logger = Logger::getInstance("test");/* step 5: Attach the appender object to the logger */_logger.addAppender(_append);/* log activity */LOG4CPLUS_DEBUG(_logger, "This is the FIRST log message...")sleep(1);LOG4CPLUS_WARN(_logger, "This is the SECOND log message...")return 0; }

輸出結(jié)果:

DEBUG - This is the FIRST log message... WARN - This is the SECOND log message...

4.2.3 例3-輸出日志到控制臺

/** iostream模式,appender輸出到控制臺。*/ #include <log4cplus/logger.h> #include <log4cplus/consoleappender.h> #include <iomanip> using namespace log4cplus;int main() {/* step 1: Instantiate an appender object */SharedAppenderPtr _append(new ConsoleAppender());_append->setName("append test");/* step 4: Instantiate a logger object */Logger _logger = Logger::getInstance("test");/* step 5: Attach the appender object to the logger */_logger.addAppender(_append);/* log activity */LOG4CPLUS_TRACE(_logger, "This is" << " just a t" << "est." << std::endl)LOG4CPLUS_DEBUG(_logger, "This is a bool: " << true)LOG4CPLUS_INFO(_logger, "This is a char: " << 'x')LOG4CPLUS_WARN(_logger, "This is a int: " << 1000)LOG4CPLUS_ERROR(_logger, "This is a long(hex): " << std::hex << 100000000)LOG4CPLUS_FATAL(_logger, "This is a double: " << std::setprecision(15) << 1.2345234234)return 0; }

輸出結(jié)果:

DEBUG - This is a bool: 1 INFO - This is a char: x WARN - This is a int: 1000 ERROR - This is a long(hex): 5f5e100 FATAL - This is a double: 1.2345234234

4.2.4 例4-輸出日志到文件

/**文件模式,appender輸出到文件。*/ #include <log4cplus/logger.h> #include <log4cplus/fileappender.h>using namespace log4cplus;int main() {/* step 1: Instantiate an appender object */SharedAppenderPtr _append(new FileAppender("Test.log"));_append->setName("file log test");/* step 4: Instantiate a logger object */Logger _logger = Logger::getInstance("test.subtestof_filelog");/* step 5: Attach the appender object to the logger */_logger.addAppender(_append);/* log activity */int i;for( i = 0; i < 5; ++i ){LOG4CPLUS_DEBUG(_logger, "Entering loop #" << i << "End line #")}return 0; }

輸出結(jié)果(Test.log文件):

DEBUG - Entering loop #0End line # DEBUG - Entering loop #1End line # DEBUG - Entering loop #2End line # DEBUG - Entering loop #3End line # DEBUG - Entering loop #4End line #

4.2.5 例5-使用loglog輸出日志

   LogLog類實(shí)現(xiàn)了debug, warn, error 函數(shù)用于logcplus運(yùn)行時顯示log4cplus自身的調(diào)試、警告或錯誤信息,是對標(biāo)準(zhǔn)輸出的簡單封裝,它也可以用來進(jìn)行簡單的日志輸出。LogLog 同時提供了兩個方法來進(jìn)一步控制所輸出的信息,其中setInternalDebugging()方法用來控制是否屏蔽輸出信息中的調(diào)試信息,當(dāng)輸入?yún)?shù)為false則屏蔽,缺省設(shè)置為false。 setQuietMode()方法用來控制是否屏蔽所有輸出信息,當(dāng)輸入?yún)?shù)為true則屏蔽,缺省設(shè)置為false。

/*通過loglog來控制輸出調(diào)試、警告或錯誤信息,appender輸出到屏幕。 */ #include <iostream> #include <log4cplus/helpers/loglog.h>using namespace log4cplus::helpers;void printMsgs(void) {std::cout << "Entering printMsgs()..." << std::endl;LogLog::getLogLog()->debug("This is a Debug statement...");LogLog::getLogLog()->warn("This is a Warning...");LogLog::getLogLog()->error("This is a Error...");std::cout << "Exiting printMsgs()..." << std::endl << std::endl; } int main() { printMsgs();std::cout << "Turning on debug..." << std::endl;LogLog::getLogLog()->setInternalDebugging(true);printMsgs();std::cout << "Turning on quiet mode..." << std::endl;LogLog::getLogLog()->setQuietMode(true);printMsgs();return 0; }

輸出結(jié)果:

Entering printMsgs()... log4cplus:WARN This is a Warning... log4cplus:ERROR This is a Error... Exiting printMsgs()... Turning on debug... Entering printMsgs()... log4cplus: This is a Debug statement... log4cplus:WARN This is a Warning... log4cplus:ERROR This is a Error... Exiting printMsgs()... Turning on quiet mode... Entering printMsgs()... Exiting printMsgs()...

   注意輸出信息中總是包含”log4cplus:”前綴,如果需要定制使其使用其他的前綴請參見9.2小節(jié)。

4.3 日志輸出宏

log4cplus在頭文件loggingmacros.h中提供了以下的日志輸出宏: LOG4CPLUS_TRACE_METHOD(logger, logEvent) LOG4CPLUS_TRACE(logger, logEvent) LOG4CPLUS_TRACE_STR(logger, logEvent)LOG4CPLUS_DEBUG(logger, logEvent) LOG4CPLUS_DEBUG_STR(logger, logEvent)LOG4CPLUS_INFO(logger, logEvent) LOG4CPLUS_INFO_STR(logger, logEvent)LOG4CPLUS_WARN(logger, logEvent) LOG4CPLUS_WARN_STR(logger, logEvent)LOG4CPLUS_ERROR(logger, logEvent) LOG4CPLUS_ERROR_STR(logger, logEvent)LOG4CPLUS_FATAL(logger, logEvent) LOG4CPLUS_FATAL_STR(logger, logEvent)

   其中l(wèi)ogger 為Logger實(shí)例名稱,logEvent為日志內(nèi)容。由于log4cplus選用C++的流機(jī)制進(jìn)行日志輸出,因此為了區(qū)分包含<<運(yùn)算符和不包含<<運(yùn)算符的日志內(nèi)容,分別提供了LOG4CPLUS_XXXX和LOG4CPLUS_XXXX_STR兩種日志輸出宏。 另外,日志輸出宏LOG4CPLUS_TRACE_METHOD主要用來跟蹤方法的調(diào)用軌跡。

5 輸出格式控制

   log4cplus通過布局器(Layouts)來控制輸出的格式,log4cplus提供了三種類型的Layouts,分別是SimpleLayout、PatternLayout、和TTCCLayout。

5.1 SimpleLayout

   一種簡單格式的布局器,在輸出的原始信息之前加上LogLevel和一個”-“,如果初始化時沒有將布局器附加到掛接器,則默認(rèn)使用SimpleLayout。
   以下代碼片段演示了如何使用SimpleLayout。

   ... .../* step 1: Instantiate an appender object */SharedObjectPtr _append (new ConsoleAppender());_append->setName("append for test");/* step 2: Instantiate a layout object */std::auto_ptr<Layout> _layout(new log4cplus::SimpleLayout());/* step 3: Attach the layout object to the appender */_append->setLayout( _layout );/* step 4: Instantiate a logger object */Logger _logger = Logger::getInstance("test");/* step 5: Attach the appender object to the logger */_logger.addAppender(_append);/* log activity */LOG4CPLUS_DEBUG(_logger, "This is the simple formatted log message...")... ...

輸出結(jié)果:

DEBUG - This is the simple formatted log message...

5.2 PatternLayout

   一種有詞法分析功能的模式布局器,類似于C語言的printf()函數(shù),能夠?qū)︻A(yù)定義的轉(zhuǎn)換標(biāo)識符(conversion specifiers)進(jìn)行解析,轉(zhuǎn)換成特定格式輸出。
   以下代碼片段演示了如何使用PatternLayout。

   ... .../* step 1: Instantiate an appender object */SharedObjectPtr _append (new ConsoleAppender());_append->setName("append for test");/* step 2: Instantiate a layout object */std::string pattern = "%d{%m/%d/%y %H:%M:%S} - %m [%l]%n";std::auto_ptr<Layout> _layout(new PatternLayout(pattern));/* step 3: Attach the layout object to the appender */_append->setLayout( _layout );/* step 4: Instantiate a logger object */Logger _logger = Logger::getInstance("test_logger.subtest");/* step 5: Attach the appender object to the logger */_logger.addAppender(_append);/* log activity */LOG4CPLUS_DEBUG(_logger, "teststr")... ...

輸出結(jié)果:

10/16/04 18:51:25 - teststr [main.cpp:51]

5.2.1 轉(zhuǎn)換標(biāo)識符

   PatterLayout支持的轉(zhuǎn)換標(biāo)識符主要包括:
(1)”%%”,轉(zhuǎn)義為%, 即,std::string pattern = “%%” 時輸出”%”。
(2)”%c”,輸出logger名稱,比如std::string pattern =”%c” 時輸出: “test_logger.subtest”, 也可以控制logger名稱的顯示層次,比如”%c{1}”時輸出”test_logger”,其中數(shù)字表示層次。
(3)”%D”,顯示本地時間,當(dāng)std::string pattern =”%D” 時輸出:”2004-10-16 18:55:45”,%d顯示標(biāo)準(zhǔn)時間,所以當(dāng)std::string pattern =”%d” 時輸出 “2004-10-16 10:55:45” (因?yàn)楸本r間位于東8區(qū),差8個小時)。
可以通過%d{…}定義更詳細(xì)的顯示格式,比如%d{%H:%M:%s}表示要顯示小時:分鐘:秒。大括號中可顯示的預(yù)定義標(biāo)識符如下:
%a – 表示禮拜幾,英文縮寫形式,比如”Fri”
%A – 表示禮拜幾,比如”Friday”
%b – 表示幾月份,英文縮寫形式,比如”O(jiān)ct”
%B – 表示幾月份,”O(jiān)ctober”
%c – 標(biāo)準(zhǔn)的日期+時間格式,如 “Sat Oct 16 18:56:19 2004”
%d – 表示今天是這個月的幾號(1-31)”16”
%H – 表示當(dāng)前時刻是幾時(0-23),如 “18”
%I – 表示當(dāng)前時刻是幾時(1-12),如 “6”
%j – 表示今天是哪一天(1-366),如 “290”
%m – 表示本月是哪一月(1-12),如 “10”
%M – 表示當(dāng)前時刻是哪一分鐘(0-59),如 “59”
%p – 表示現(xiàn)在是上午還是下午, AM or PM
%q – 表示當(dāng)前時刻中毫秒部分(0-999),如 “237”
%Q – 表示當(dāng)前時刻中帶小數(shù)的毫秒部分(0-999.999),如 “430.732”
%S – 表示當(dāng)前時刻的多少秒(0-59),如 “32”
%U – 表示本周是今年的第幾個禮拜,以周日為第一天開始計算(0-53),如 “41”
%w – 表示禮拜幾,(0-6, 禮拜天為0),如 “6”
%W – 表示本周是今年的第幾個禮拜,以周一為第一天開始計算(0-53),如 “41”
%x – 標(biāo)準(zhǔn)的日期格式,如 “10/16/04”
%X – 標(biāo)準(zhǔn)的時間格式,如 “19:02:34”
%y – 兩位數(shù)的年份(0-99),如 “04”
%Y – 四位數(shù)的年份,如 “2004”
%Z – 時區(qū)名,比如 “GMT”
(4)”%F”,輸出當(dāng)前記錄器所在的文件名稱,比如std::string pattern =”%F” 時輸出: “main.cpp”。
(5)”%L”,輸出當(dāng)前記錄器所在的文件行號,比如std::string pattern =”%L” 時輸出: “51”
(6)”%l”,輸出當(dāng)前記錄器所在的文件名稱和行號,比如std::string pattern =”%L” 時輸出”main.cpp:51”。
(7)”%m”,輸出原始信息,比如std::string pattern =”%m” 時輸出: “teststr”,即上述代碼中LOG4CPLUS_DEBUG的第二個參數(shù),這種實(shí)現(xiàn)機(jī)制可以確保原始信息被嵌入到帶格式的信息中。
(8)”%n”,換行符,沒什么好解釋的。
(9)”%p”,輸出LogLevel,比如std::string pattern =”%p” 時輸出: “DEBUG”。
(10)”%t”,輸出記錄器所在的線程ID,比如std::string pattern =”%t” 時輸出: “1075298944”。
(11)”%x”,嵌套診斷上下文NDC (nested diagnostic context) 輸出,從堆棧中彈出上下文信息,NDC可以用對不同源的log信息(同時地)交叉輸出進(jìn)行區(qū)分,關(guān)于NDC方面的詳細(xì)介紹會在下文中提到。
(12)格式對齊,比如std::string pattern =”%-10m”時表示左對齊,寬度是10,此時會輸出”teststr “,當(dāng)然其它的控制字符也可以相同的方式來使用,比如”%-12d”,”%-5p”等等。

5.3 TTCCLayout

   是在PatternLayout基礎(chǔ)上發(fā)展的一種缺省的帶格式輸出的布局器, 其格式由時間,線程ID,Logger和NDC 組成(consists of time, thread, Logger and nested diagnostic context information, hence the name),因而得名, 關(guān)于NDC請參見6.4小節(jié)。
   以下代碼片段演示了如何使用TTCCLayout。

   ... .../* step 1: Instantiate an appender object */SharedObjectPtr _append (new ConsoleAppender());_append->setName("append for test");/* step 2: Instantiate a layout object */std::auto_ptr _layout(new TTCCLayout());/* step 3: Attach the layout object to the appender */_append->setLayout( _layout );/* step 4: Instantiate a logger object */Logger _logger = Logger::getInstance("test_logger");/* step 5: Attach the appender object to the logger */_logger.addAppender(_append);/* log activity */LOG4CPLUS_DEBUG(_logger, "teststr")... ...

輸出結(jié)果:

10-16-04 19:08:27,501 [1075298944] DEBUG test_logger <> - teststr

   TTCCLayout在構(gòu)造時有機(jī)會選擇顯示本地時間或GMT時間,缺省是按照本地時間顯示:
   TTCCLayout::TTCCLayout(bool use_gmtime = false)
   如果需要構(gòu)造TTCCLayout對象時選擇GMT時間格式,則使用方式如下代碼片斷所示。

... .../* step 2: Instantiate a layout object */std::auto_ptr _layout(new TTCCLayout(true));... ...

輸出結(jié)果:

10-16-04 11:12:47,678 [1075298944] DEBUG test_logger <> - teststr

6 輸出重定向

6.1 重定向到控制臺

log4cplus默認(rèn)將輸出到控制臺,提供ConsoleAppender用于操作。示例代碼請參見4.2.1、4.2.2或4.2.3小節(jié),這里不再贅述。

6.2 重定向到文件

   log4cplus提供了三個類用于文件操作,它們是FileAppender類、RollingFileAppender類、DailyRollingFileAppender類。

6.2.1 FileAppender

   實(shí)現(xiàn)了基本的文件操作功能,構(gòu)造函數(shù)如下:
FileAppender ::FileAppender(const log4cplus::tstring& filename,
LOG4CPLUS_OPEN_MODE_TYPE mode =
LOG4CPLUS_FSTREAM_NAMESPACE::ios::trunc,
bool immediateFlush = true);
filename : 文件名
mode : 文件類型,可選擇的文件類型包括app、ate、binary、in、out、trunc,因?yàn)閷?shí)際上只是對stl的一個簡單包裝,這里就不多講了。缺省是trunc,表示將先前文件刪除。
immediateFlush : 緩沖刷新標(biāo)志,如果為true表示每向文件寫一條記錄就刷新一次緩存,否則直到FileAppender被關(guān)閉或文件緩存已滿才更新文件,一般是要設(shè)置true的,比如你往文件寫的過程中出現(xiàn)了錯誤(如程序非正常退出),即使文件沒有正常關(guān)閉也可以保證程序終止時刻之前的所有 記錄都會被正常保存。
  FileAppender類的使用情況請參考4.2.5小節(jié),這里不再贅述。

6.2.2 RollingFileAppender

  實(shí)現(xiàn)可以滾動轉(zhuǎn)儲的文件操作功能,構(gòu)造函數(shù)如下:
RollingFileAppender::RollingFileAppender(const log4cplus::tstring& filename,
long maxFileSize,
int maxBackupIndex,
bool immediateFlush)
filename : 文件名
maxFileSize : 文件的最大尺寸
maxBackupIndex : 最大記錄文件數(shù)
immediateFlush : 緩沖刷新標(biāo)志
   RollingFileAppender類可以根據(jù)你預(yù)先設(shè)定的大小來決定是否轉(zhuǎn)儲,當(dāng)超過該大小,后續(xù)log信息會另存到新文件中,除了定義每個記錄文件的大小之外,你還要確定在RollingFileAppender類對象構(gòu)造時最多需要多少個這樣的記錄文件(maxBackupIndex+1),當(dāng)存儲的文件數(shù)目超過maxBackupIndex+1時,會刪除最早生成的文件,保證整個文件數(shù)目等于maxBackupIndex+1。然后繼續(xù)記錄,比如以下代碼片段:

   ... ...#define LOOP_COUNT 200000SharedAppenderPtr _append(new RollingFileAppender("Test.log", 5*1024, 5));_append->setName("file test");_append->setLayout( std::auto_ptr(new TTCCLayout()) );Logger::getRoot().addAppender(_append);Logger root = Logger::getRoot();Logger test = Logger::getInstance("test");Logger subTest = Logger::getInstance("test.subtest");for(int i=0; i {NDCContextCreator _context("loop");LOG4CPLUS_DEBUG(subTest, "Entering loop #" << i)}... ...

輸出結(jié)果:
   運(yùn)行后會產(chǎn)生6個輸出文件,Test.log、Test.log.1、Test.log.2、Test.log.3、Test.log.4、Test.log.5其中Test.log存放著最新寫入的信息,而最后一個文件中并不包含第一個寫入信息,說明已經(jīng)被不斷更新了。
   需要指出的是,這里除了Test.log之外,每個文件的大小都是200K,而不是我們想像中的5K,這是因?yàn)閘og4cplus中隱含定義了文件的最小尺寸是200K,只有大于200K的設(shè)置才生效,<= 200k的設(shè)置都會被認(rèn)為是200K。

6.2.3 DailyRollingFileAppender

   實(shí)現(xiàn)根據(jù)頻度來決定是否轉(zhuǎn)儲的文件轉(zhuǎn)儲功能,構(gòu)造函數(shù)如下:

DailyRollingFileAppender::DailyRollingFileAppender(const log4cplus::tstring& filename,DailyRollingFileSchedule schedule,bool immediateFlush,int maxBackupIndex) filename : 文件名 schedule : 存儲頻度 immediateFlush : 緩沖刷新標(biāo)志 maxBackupIndex : 最大記錄文件數(shù)

   DailyRollingFileAppender類可以根據(jù)你預(yù)先設(shè)定的頻度來決定是否轉(zhuǎn)儲,當(dāng)超過該頻度,后續(xù)log信息會另存到新文件中,這里的頻度包括:MONTHLY(每月)、WEEKLY(每周)、DAILY(每日)、TWICE_DAILY(每兩天)、HOURLY(每時)、MINUTELY(每分)。maxBackupIndex的含義同上所述,比如以下代碼片段:

   ... ...SharedAppenderPtr _append(new DailyRollingFileAppender("Test.log", MINUTELY, true, 5));_append->setName("file test");_append->setLayout( std::auto_ptr(new TTCCLayout()) );Logger::getRoot().addAppender(_append);Logger root = Logger::getRoot();Logger test = Logger::getInstance("test");Logger subTest = Logger::getInstance("test.subtest");for(int i=0; i {NDCContextCreator _context("loop");LOG4CPLUS_DEBUG(subTest, "Entering loop #" << i)}... ...

輸出結(jié)果:
   運(yùn)行后會以分鐘為單位,分別生成名為Test.log.2004-10-17-03-03、Test.log.2004-10-17-03-04和Test.log.2004-10-17-03-05這樣的文件。
   需要指出的是這里的”頻度”并不是你寫入文件的速度,其實(shí)是否轉(zhuǎn)儲的標(biāo)準(zhǔn)并不依賴你寫入文件的速度,而是依賴于寫入的那一時刻是否滿足了頻度條件,即是否超過了以分鐘、小時、周、月為單位的時間刻度,如果超過了就另存。

6.3 重定向到遠(yuǎn)程服務(wù)器

   log4cplus提供了SocketAppender,實(shí)現(xiàn)了C/S方式的日志記錄,用于支持重定向到遠(yuǎn)程服務(wù)器。

6.3.1 客戶端程序需要做的工作

(1) 定義一個SocketAppender類型的掛接器
   SharedAppenderPtr _append(new SocketAppender(host, 8888, “ServerName”));
(2) 把該掛接器加入到logger中
   Logger::getRoot().addAppender(_append);
(3) SocketAppender類型不需要Layout, 直接調(diào)用宏就可以將信息發(fā)往loggerServer了LOG4CPLUS_INFO(Logger::getRoot(), “This is a test: “)
   注意這里對宏的調(diào)用其實(shí)是調(diào)用了SocketAppender::append(),里面有一個數(shù)據(jù)傳輸約定,即先發(fā)送一個后續(xù)數(shù)據(jù)的總長度,然后再發(fā)送實(shí)際的數(shù)據(jù):

   ... ...SocketBuffer buffer = convertToBuffer(event, serverName);SocketBuffer msgBuffer(LOG4CPLUS_MAX_MESSAGE_SIZE);msgBuffer.appendSize_t(buffer.getSize());msgBuffer.appendBuffer(buffer);... ...

6.3.2 服務(wù)器端程序需要做的工作

(1) 定義一個ServerSocket
   ServerSocket serverSocket(port);
(2) 調(diào)用accept函數(shù)創(chuàng)建一個新的socket與客戶端連接
   Socket sock = serverSocket.accept();
(3) 此后即可用該sock進(jìn)行數(shù)據(jù)read/write了,形如(完整代碼見6.3.3小節(jié)):

  SocketBuffer msgSizeBuffer(sizeof(unsigned int));if(!clientsock.read(msgSizeBuffer)){return;} unsigned int msgSize = msgSizeBuffer.readInt();SocketBuffer buffer(msgSize);if(!clientsock.read(buffer)){return; }

(4) 為了將讀到的數(shù)據(jù)正常顯示出來,需要將SocketBuffer存放的內(nèi)容轉(zhuǎn)換成InternalLoggingEvent格式:
   log4cplus::spi::InternalLoggingEvent event = readFromBuffer(buffer);
   然后輸出:

   Logger logger = Logger::getInstance(event.getLoggerName());logger.callAppenders(event);

   注意read/write是按照阻塞方式實(shí)現(xiàn)的,意味著對其調(diào)用直到滿足了所接收或發(fā)送的個數(shù)才返回。

6.3.3 例6-重定向到遠(yuǎn)程服務(wù)器

   以下是服務(wù)器端代碼。

#include <log4cplus/config.h> #include <log4cplus/configurator.h> #include <log4cplus/consoleappender.h> #include <log4cplus/socketappender.h> #include <log4cplus/helpers/loglog.h> #include <log4cplus/helpers/socket.h> #include <log4cplus/helpers/threads.h> #include <log4cplus/spi/loggerimpl.h> #include <log4cplus/spi/loggingevent.h>#include <iostream>using namespace std; using namespace log4cplus; using namespace log4cplus::helpers; using namespace log4cplus::thread;namespace loggingserver {class ClientThread : public AbstractThread {public:ClientThread(Socket clientsock): clientsock(clientsock) {cout << "Received a client connection!!!!" << endl;}~ClientThread(){cout << "Client connection closed." << endl;}virtual void run();private:Socket clientsock;};}int main(int argc, char** argv) {if(argc < 3) {cout << "Usage: port config_file" << endl;return 1;}int port = atoi(argv[1]);tstring configFile = LOG4CPLUS_C_STR_TO_TSTRING(argv[2]);PropertyConfigurator config(configFile);config.configure();ServerSocket serverSocket(port);while(1) {loggingserver::ClientThread *thr = new loggingserver::ClientThread(serverSocket.accept());thr->start();}return 0; }//////////////////////////////////////////////////////////////////////////////// // loggingserver::ClientThread implementation ////////////////////////////////////////////////////////////////////////////////void loggingserver::ClientThread::run() {while(1) {if(!clientsock.isOpen()) {return;}SocketBuffer msgSizeBuffer(sizeof(unsigned int));if(!clientsock.read(msgSizeBuffer)) {return;}unsigned int msgSize = msgSizeBuffer.readInt();SocketBuffer buffer(msgSize);if(!clientsock.read(buffer)) {return;}spi::InternalLoggingEvent event = readFromBuffer(buffer);Logger logger = Logger::getInstance(event.getLoggerName());logger.callAppenders(event); } }

   以下是客戶端代碼。

#include <log4cplus/logger.h> #include <log4cplus/socketappender.h> #include <log4cplus/loglevel.h> #include <log4cplus/tstring.h> #include <log4cplus/helpers/threads.h> #include <iomanip>using namespace std; using namespace log4cplus;int main(int argc, char **argv) {log4cplus::helpers::sleep(1);tstring serverName = (argc > 1 ? LOG4CPLUS_C_STR_TO_TSTRING(argv[1]) : tstring()); // tstring host = LOG4CPLUS_TEXT("192.168.2.10");tstring host = LOG4CPLUS_TEXT("127.0.0.1");SharedAppenderPtr append_1(new SocketAppender(host, 9998, serverName));append_1->setName( LOG4CPLUS_TEXT("First") );Logger::getRoot().addAppender(append_1);Logger root = Logger::getRoot();Logger test = Logger::getInstance( LOG4CPLUS_TEXT("socket.test") );LOG4CPLUS_DEBUG(root, "This is"<< " a reall"<< "y long message." << endl<< "Just testing it out" << endl<< "What do you think?")test.setLogLevel(NOT_SET_LOG_LEVEL);LOG4CPLUS_DEBUG(test, "This is a bool: " << true)LOG4CPLUS_INFO(test, "This is a char: " << 'x')LOG4CPLUS_INFO(test, "This is a short: " << (short)-100)LOG4CPLUS_INFO(test, "This is a unsigned short: " << (unsigned short)100)log4cplus::helpers::sleep(0, 500000);LOG4CPLUS_INFO(test, "This is a int: " << (int)1000)LOG4CPLUS_INFO(test, "This is a unsigned int: " << (unsigned int)1000)LOG4CPLUS_INFO(test, "This is a long(hex): " << hex << (long)100000000)LOG4CPLUS_INFO(test, "This is a unsigned long: " << (unsigned long)100000000)LOG4CPLUS_WARN(test, "This is a float: " << (float)1.2345)LOG4CPLUS_ERROR(test, "This is a double: " << setprecision(15) << (double)1.2345234234)LOG4CPLUS_FATAL(test, "This is a long double: " << setprecision(15) << (long double)123452342342.342)return 0; }

6.4嵌入診斷上下文NDC

   log4cplus中的嵌入診斷上下文(Nested Diagnostic Context),即NDC。對log系統(tǒng)而言,當(dāng)輸入源可能不止一個,而只有一個輸出時,往往需要分辯所要輸出消息的來源,比如服務(wù)器處理來自不同客戶端的消息時就需要作此判斷,NDC可以為交錯顯示的信息打上一個標(biāo)記(stamp),使得辨認(rèn)工作看起來比較容易些。這個標(biāo)記是線程特有的,利用了線程局部存儲機(jī)制,稱為線程私有數(shù)據(jù)(Thread-Specific Data,或TSD)。相關(guān)定義如下,包括定義、初始化、獲取、設(shè)置和清除操作:

linux pthread #define LOG4CPLUS_THREAD_LOCAL_TYPE pthread_key_t* #define LOG4CPLUS_THREAD_LOCAL_INIT ::log4cplus::thread::createPthreadKey() #define LOG4CPLUS_GET_THREAD_LOCAL_VALUE( key ) pthread_getspecific(*key) #defineLOG4CPLUS_SET_THREAD_LOCAL_VALUE(key,value) \pthread_setspecific(*key, value) #define LOG4CPLUS_THREAD_LOCAL_CLEANUP( key ) pthread_key_delete(*key)win32 #define LOG4CPLUS_THREAD_LOCAL_TYPE DWORD #define LOG4CPLUS_THREAD_LOCAL_INIT TlsAlloc() #define LOG4CPLUS_GET_THREAD_LOCAL_VALUE( key ) TlsGetValue(key) #define LOG4CPLUS_SET_THREAD_LOCAL_VALUE( key, value ) \TlsSetValue(key, static_cast(value)) #define LOG4CPLUS_THREAD_LOCAL_CLEANUP( key ) TlsFree(key)

   使用起來比較簡單,在某個線程中:

   NDC& ndc = log4cplus::getNDC();ndc.push("ur ndc string");LOG4CPLUS_DEBUG(logger, "this is a NDC test");... ...ndc.pop();... ...LOG4CPLUS_DEBUG(logger, "There should be no NDC...");ndc.remove();

輸出結(jié)果(當(dāng)設(shè)定輸出格式為TTCCLayout時):

10-21-04 21:32:58, [3392] DEBUG test - this is a NDC test 10-21-04 21:32:58, [3392] DEBUG test <> - There should be no NDC...

也可以在自定義的輸出格式中使用NDC(用%x) ,比如:

... ...std::string pattern = "NDC:[%x] - %m %n";std::auto_ptr _layout(new PatternLayout(pattern));... ...LOG4CPLUS_DEBUG(_logger, "This is the FIRST log message...")NDC& ndc = log4cplus::getNDC();ndc.push("ur ndc string");LOG4CPLUS_WARN(_logger, "This is the SECOND log message...")ndc.pop();ndc.remove();... ...

輸出結(jié)果:

NDC:[] - This is the FIRST log message... NDC:[ur ndc string] - This is the SECOND log message...

   另外一種更簡單的使用方法是在線程中直接用NDCContextCreator:

NDCContextCreator _first_ndc("ur ndc string");LOG4CPLUS_DEBUG(logger, "this is a NDC test")

   不必顯式地調(diào)用push/pop了,而且當(dāng)出現(xiàn)異常時,能夠確保push與pop的調(diào)用是匹配的。

7 輸出過濾

7.1 利用日志級別進(jìn)行輸出過濾

7.1.1 日志級別管理

   log4cplus將輸出的log信息按照LogLevel(從低到高)分為:
級別 說明
NOT_SET_LOG_LEVEL ( -1) 接受缺省的LogLevel,如果有父logger則繼承它的LogLevel
ALL_LOG_LEVEL (0) 開放所有l(wèi)og信息輸出
TRACE_LOG_LEVEL (0) 開放trace信息輸出(即ALL_LOG_LEVEL)
DEBUG_LOG_LEVEL(10000) 開放debug信息輸出
INFO_LOG_LEVEL (20000) 開放info信息輸出
WARN_LOG_LEVEL (30000) 開放warning信息輸出
ERROR_LOG_LEVEL(40000) 開放error信息輸出
FATAL_LOG_LEVEL (50000) 開放fatal信息輸出
OFF_LOG_LEVEL (60000) 關(guān)閉所有l(wèi)og信息輸出
   在log4cplus中,所有l(wèi)ogger都通過一個層次化的結(jié)構(gòu)(其實(shí)內(nèi)部是hash表)來組織的,有一個Root級別的logger,可以通過以下方法獲取:
Logger root = Logger::getRoot();
   用戶定義的logger都有一個名字與之對應(yīng),比如:
Logger test = Logger::getInstance(“test”);
   可以定義該logger的子logger:
Logger subTest = Logger::getInstance(“test.subtest”);
   注意Root級別的logger只有通過getRoot方法獲取,Logger::getInstance(“root”)獲得的是它的子對象而已。有了這些具有父子關(guān)系的logger之后可分別設(shè)置其LogLevel,比如:
   root.setLogLevel( … );
   Test.setLogLevel( … );
   subTest.setLogLevel( … );
   各個logger可以通過setLogLevel設(shè)置自己的優(yōu)先級,當(dāng)某個logger的LogLevel設(shè)置成NOT_SET_LOG_LEVEL時,該logger會繼承父logger的優(yōu)先級,另外,如果定義了重名的多個logger, 對其中任何一個的修改都會同時改變其它logger。

7.1.2 利用日志級別進(jìn)行輸出過濾

   log4cplus支持編譯時候和運(yùn)行時刻利用日志級別進(jìn)行輸出過濾。編譯時刻通過如下的預(yù)定義變量進(jìn)行過濾:
   #define LOG4CPLUS_DISABLE_FATAL
   #define LOG4CPLUS_DISABLE_WARN
   #define LOG4CPLUS_DISABLE_ERROR
   #define LOG4CPLUS_DISABLE_INFO
   #define LOG4CPLUS_DISABLE_DEBUG
   #define LOG4CPLUS_DISABLE_TRACE
   運(yùn)行時刻的過濾則通過使用Logger的setLogLevel設(shè)置日志級別進(jìn)行過濾。

7.1.3 例7-日志的優(yōu)先級

#include "log4cplus/logger.h" #include "log4cplus/consoleappender.h" #include "log4cplus/loglevel.h" #include <iostream>using namespace std; using namespace log4cplus;int main() {SharedAppenderPtr _append(new ConsoleAppender());_append->setName("test");Logger::getRoot().addAppender(_append);Logger root = Logger::getRoot();Logger test = Logger::getInstance("test");Logger subTest = Logger::getInstance("test.subtest");LogLevelManager& llm = getLogLevelManager();cout << endl << "Before Setting, Default LogLevel" << endl;LOG4CPLUS_FATAL(root, "root: " << llm.toString(root.getChainedLogLevel()))LOG4CPLUS_FATAL(root, "test: " << llm.toString(test.getChainedLogLevel()))LOG4CPLUS_FATAL(root,"test.subtest:" << llm.toString(subTest.getChainedLogLevel()))cout << endl << "Setting test.subtest to WARN" << endl;subTest.setLogLevel(WARN_LOG_LEVEL);LOG4CPLUS_FATAL(root, "root: " << llm.toString(root.getChainedLogLevel()))LOG4CPLUS_FATAL(root, "test: " << llm.toString(test.getChainedLogLevel()))LOG4CPLUS_FATAL(root, "test.subtest: " << llm.toString(subTest.getChainedLogLevel()))cout << endl << "Setting test to TRACE" << endl;test.setLogLevel(TRACE_LOG_LEVEL);LOG4CPLUS_FATAL(root, "root: " << llm.toString(root.getChainedLogLevel()))LOG4CPLUS_FATAL(root, "test: " << llm.toString(test.getChainedLogLevel()))LOG4CPLUS_FATAL(root, "test.subtest: " << llm.toString(subTest.getChainedLogLevel()))cout << endl << "Setting test.subtest to NO_LEVEL" << endl;subTest.setLogLevel(NOT_SET_LOG_LEVEL);LOG4CPLUS_FATAL(root, "root: " << llm.toString(root.getChainedLogLevel()))LOG4CPLUS_FATAL(root, "test: " << llm.toString(test.getChainedLogLevel()))LOG4CPLUS_FATAL(root, "test.subtest: " << llm.toString(subTest.getChainedLogLevel()) << '\n')cout << "create a logger test_bak, named \"test_\", too. " << endl;Logger test_bak = Logger::getInstance("test");cout << "Setting test to INFO, so test_bak also be set to INFO" << endl;test.setLogLevel(INFO_LOG_LEVEL);LOG4CPLUS_FATAL(root, "test: " << llm.toString(test.getChainedLogLevel()))LOG4CPLUS_FATAL(root, "test_bak: " << llm.toString(test_bak.getChainedLogLevel()))return 0; }

輸出結(jié)果:

Before Setting, Default LogLevel FATAL - root: DEBUG FATAL - test: DEBUG FATAL - test.subtest: DEBUGSetting test.subtest to WARN FATAL - root: DEBUG FATAL - test: DEBUG FATAL - test.subtest: WARNSetting test to TRACE FATAL - root: DEBUG FATAL - test: TRACE FATAL - test.subtest: WARNSetting test.subtest to NO_LEVEL FATAL - root: DEBUG FATAL - test: TRACE FATAL - test.subtest: TRACEcreate a logger test_bak, named "test_", too. Setting test to INFO, so test_bak also be set to INFO FATAL - test: INFO FATAL - test_bak: INFO

7.1.4 例8-運(yùn)行時利用日志級別進(jìn)行輸出過濾

#include "log4cplus/logger.h" #include "log4cplus/consoleappender.h" #include "log4cplus/loglevel.h" #include <iostream>using namespace std; using namespace log4cplus;void ShowMsg(void) {LOG4CPLUS_TRACE(Logger::getRoot(),"info")LOG4CPLUS_DEBUG(Logger::getRoot(),"info")LOG4CPLUS_INFO(Logger::getRoot(),"info")LOG4CPLUS_WARN(Logger::getRoot(),"info")LOG4CPLUS_ERROR(Logger::getRoot(),"info")LOG4CPLUS_FATAL(Logger::getRoot(),"info") }int main() {SharedAppenderPtr _append(new ConsoleAppender());_append->setName("test");_append->setLayout(std::auto_ptr(new TTCCLayout()));Logger root = Logger::getRoot();root.addAppender(_append);cout << endl << "all-log allowed" << endl;root.setLogLevel(ALL_LOG_LEVEL);ShowMsg();cout << endl << "trace-log and above allowed" << endl;root.setLogLevel(TRACE_LOG_LEVEL);ShowMsg();cout << endl << "debug-log and above allowed" << endl;root.setLogLevel(DEBUG_LOG_LEVEL);ShowMsg();cout << endl << "info-log and above allowed" << endl;root.setLogLevel(INFO_LOG_LEVEL);ShowMsg();cout << endl << "warn-log and above allowed" << endl;root.setLogLevel(WARN_LOG_LEVEL);ShowMsg();cout << endl << "error-log and above allowed" << endl;root.setLogLevel(ERROR_LOG_LEVEL);ShowMsg();cout << endl << "fatal-log and above allowed" << endl;root.setLogLevel(FATAL_LOG_LEVEL);ShowMsg();cout << endl << "log disabled" << endl;root.setLogLevel(OFF_LOG_LEVEL);ShowMsg();return 0; }

輸出結(jié)果:

all-log allowed 10-17-04 10:11:40,587 [1075298944] TRACE root <> - info 10-17-04 10:11:40,590 [1075298944] DEBUG root <> - info 10-17-04 10:11:40,591 [1075298944] INFO root <> - info 10-17-04 10:11:40,591 [1075298944] WARN root <> - info 10-17-04 10:11:40,592 [1075298944] ERROR root <> - info 10-17-04 10:11:40,592 [1075298944] FATAL root <> - infotrace-log and above allowed 10-17-04 10:11:40,593 [1075298944] TRACE root <> - info 10-17-04 10:11:40,593 [1075298944] DEBUG root <> - info 10-17-04 10:11:40,594 [1075298944] INFO root <> - info 10-17-04 10:11:40,594 [1075298944] WARN root <> - info 10-17-04 10:11:40,594 [1075298944] ERROR root <> - info 10-17-04 10:11:40,594 [1075298944] FATAL root <> - infodebug-log and above allowed 10-17-04 10:11:40,595 [1075298944] DEBUG root <> - info 10-17-04 10:11:40,595 [1075298944] INFO root <> - info 10-17-04 10:11:40,596 [1075298944] WARN root <> - info 10-17-04 10:11:40,596 [1075298944] ERROR root <> - info 10-17-04 10:11:40,596 [1075298944] FATAL root <> - infoinfo-log and above allowed 10-17-04 10:11:40,597 [1075298944] INFO root <> - info 10-17-04 10:11:40,597 [1075298944] WARN root <> - info 10-17-04 10:11:40,597 [1075298944] ERROR root <> - info 10-17-04 10:11:40,598 [1075298944] FATAL root <> - infowarn-log and above allowed 10-17-04 10:11:40,598 [1075298944] WARN root <> - info 10-17-04 10:11:40,598 [1075298944] ERROR root <> - info 10-17-04 10:11:40,599 [1075298944] FATAL root <> - infoerror-log and above allowed 10-17-04 10:11:40,599 [1075298944] ERROR root <> - info 10-17-04 10:11:40,600 [1075298944] FATAL root <> - infofatal-log and above allowed 10-17-04 10:11:40,600 [1075298944] FATAL root <> - infolog disabled

7.2 利用腳本配置進(jìn)行輸出過濾

由于log4cplus腳本配置中可以設(shè)置日志的級別、過濾器Filter,因此它也是進(jìn)行輸出過濾的一種很好的選擇。腳本配置的使用具體參見第8節(jié)。

7.3 LogLog的輸出過濾

   Loglog可以使用setInternalDebugging()方法用來控制是否屏蔽輸出信息中的調(diào)試信息,當(dāng)輸入?yún)?shù)為false則屏蔽,缺省設(shè)置為false。 另外方法setQuietMode()方法用來控制是否屏蔽所有輸出信息,當(dāng)輸入?yún)?shù)為true則屏蔽,缺省設(shè)置為false。具體用法請參見4.2.5小節(jié)。

8 腳本配置

   除了通過程序?qū)崿F(xiàn)對log環(huán)境的配置之外,log4cplus通過PropertyConfigurator類實(shí)現(xiàn)了基于腳本配置的功能。通過腳本可以完成對logger、appender和layout的配置,因此可以解決怎樣輸出,輸出到哪里的問題。
   下面將簡單介紹一下腳本的語法規(guī)則,包括基本配置語法和高級配置語法。

8.1 基本配置

   基本配置語法主要針對包括rootLogger和non-root logger。

8.1.1根Logger的配置

語法:

   log4cplus.rootLogger=[LogLevel], appenderName, appenderName, …

8.1.2非根Logger的配置

語法:

   log4cplus.logger.logger_name=[LogLevel|INHERITED], appenderName, appenderName, …
   說明:INHERITED表示繼承父Logger的日志級別。

8.2 高級配置

8.2.1 Appender配置

   語法:
   log4cplus.appender.appenderName=fully.qualified.name.of.appender.class
舉例:

log4cplus.appender.append_1=log4cplus::ConsoleAppender log4cplus.appender.append_2=log4cplus::FileAppender log4cplus.appender.append_3=log4cplus::RollingFileAppender log4cplus.appender.append_4=log4cplus::DailyRollingFileAppender log4cplus.appender.append_4=log4cplus::SocketAppender

8.2.2 Filter配置
   Appender可以附加Filter組成的鏈表,如果Filter鏈中存在過濾器Filter, log4cplus在輸出日志之前將調(diào)用鏈表中Filter的過濾方法decide(),根據(jù)該方法的返回值決定是否過濾該輸出日志。
   語法:
   log4cplus.appender.appenderName.Filter.FilterNumber=fully.qualified.name.of.Filter.class
   log4cplus.appender.appenderName.Filter.FilterNumber.FilterCondition=value.of.FilterCondition
   舉例:

log4cplus.appender.append_1.filters.1=log4cplus::spi::LogLevelMatchFilter log4cplus.appender.append_1.filters.1.LogLevelToMatch=TRACE log4cplus.appender.append_1.filters.1.AcceptOnMatch=true

   目前l(fā)og4plus提供的過濾器包括DenyAllFilter 、LogLevelMatchFilter、LogLevelRangeFilter、和StringMatchFilter。
LogLevelMatchFilter根據(jù)特定的日志級別進(jìn)行過濾。
   過濾條件包括LogLevelToMatch和AcceptOnMatch(true|false), 只有當(dāng)日志的LogLevel值與LogLevelToMatch相同,且AcceptOnMatch為true時才會匹配。
LogLevelRangeFilter根據(jù)根據(jù)日志級別的范圍進(jìn)行過濾。
過濾條件包括LogLevelMin、LogLevelMax和AcceptOnMatch,只有當(dāng)日志的LogLevel在LogLevelMin、LogLevelMax之間同時AcceptOnMatch為true時才會匹配。
StringMatchFilter根據(jù)日志內(nèi)容是否包含特定字符串進(jìn)行過濾。
  過濾條件包括StringToMatch和AcceptOnMatch,只有當(dāng)日志包含StringToMatch字符串 且AcceptOnMatch為true時會匹配。
DenyAllFilter則過濾掉所有消息。
   過濾條件處理機(jī)制類似于Linux中IPTABLE的Responsibility chain機(jī)制,(即先deny、再allow)不過執(zhí)行順序剛好相反,后寫的條件會被先執(zhí)行,比如:

log4cplus.appender.append_1.filters.1=log4cplus::spi::LogLevelMatchFilter log4cplus.appender.append_1.filters.1.LogLevelToMatch=TRACE log4cplus.appender.append_1.filters.1.AcceptOnMatch=true #log4cplus.appender.append_1.filters.2=log4cplus::spi::DenyAllFilter

會首先執(zhí)行filters.2的過濾條件,關(guān)閉所有過濾器,然后執(zhí)行filters.1,僅匹配TRACE信息。

8.2.3 Layout配置

   可以選擇不設(shè)置、TTCCLayout、或PatternLayout,如果不設(shè)置,會輸出SimpleLayout格式的日志。
   設(shè)置TTCCLayout的語法:
log4cplus.appender.ALL_MSGS.layout=log4cplus::TTCCLayout
   設(shè)置PatternLayout的語法:
log4cplus.appender.append_1.layout=log4cplus::PatternLayout
   舉例:
log4cplus.appender.append_1.layout.ConversionPattern=%d{%m/%d/%y %H:%M:%S,%Q} [%t] %-5p - %m%n

8.3.3 例9-腳本配置

   腳本方式使用起來非常簡單,只要首先加載配置即可(urconfig.properties是自行定義的配置文件):
   PropertyConfigurator::doConfigure(“urconfig.properties”);
  下面我們通過例子體會一下log4cplus強(qiáng)大的基于腳本過濾log信息的功能。以下是urconfig.properties示例腳本配置內(nèi)容。

/** urconfig.properties*/ log4cplus.rootLogger=TRACE, ALL_MSGS, TRACE_MSGS, DEBUG_INFO_MSGS, FATAL_MSGSlog4cplus.appender.ALL_MSGS=log4cplus::RollingFileAppender log4cplus.appender.ALL_MSGS.File=all_msgs.log log4cplus.appender.ALL_MSGS.layout=log4cplus::TTCCLayoutlog4cplus.appender.TRACE_MSGS=log4cplus::RollingFileAppender log4cplus.appender.TRACE_MSGS.File=trace_msgs.log log4cplus.appender.TRACE_MSGS.layout=log4cplus::TTCCLayout log4cplus.appender.TRACE_MSGS.filters.1=log4cplus::spi::LogLevelMatchFilter log4cplus.appender.TRACE_MSGS.filters.1.LogLevelToMatch=TRACE log4cplus.appender.TRACE_MSGS.filters.1.AcceptOnMatch=true log4cplus.appender.TRACE_MSGS.filters.2=log4cplus::spi::DenyAllFilterlog4cplus.appender.DEBUG_INFO_MSGS=log4cplus::RollingFileAppender log4cplus.appender.DEBUG_INFO_MSGS.File=debug_info_msgs.log log4cplus.appender.DEBUG_INFO_MSGS.layout=log4cplus::TTCCLayout log4cplus.appender.DEBUG_INFO_MSGS.filters.1=log4cplus::spi::LogLevelRangeFilter log4cplus.appender.DEBUG_INFO_MSGS.filters.1.LogLevelMin=DEBUG log4cplus.appender.DEBUG_INFO_MSGS.filters.1.LogLevelMax=INFO log4cplus.appender.DEBUG_INFO_MSGS.filters.1.AcceptOnMatch=true log4cplus.appender.DEBUG_INFO_MSGS.filters.2=log4cplus::spi::DenyAllFilterlog4cplus.appender.FATAL_MSGS=log4cplus::RollingFileAppender log4cplus.appender.FATAL_MSGS.File=fatal_msgs.log log4cplus.appender.FATAL_MSGS.layout=log4cplus::TTCCLayout log4cplus.appender.FATAL_MSGS.filters.1=log4cplus::spi::StringMatchFilter log4cplus.appender.FATAL_MSGS.filters.1.StringToMatch=FATAL log4cplus.appender.FATAL_MSGS.filters.1.AcceptOnMatch=true log4cplus.appender.FATAL_MSGS.filters.2=log4cplus::spi::DenyAllFilter 以下是示例代碼。 /** main.cpp*/ #include <log4cplus/logger.h> #include <log4cplus/configurator.h> #include <log4cplus/helpers/stringhelper.h>using namespace log4cplus;static Logger logger = Logger::getInstance("log");void printDebug() {LOG4CPLUS_TRACE_METHOD(logger, "::printDebug()");LOG4CPLUS_DEBUG(logger, "This is a DEBUG message");LOG4CPLUS_INFO(logger, "This is a INFO message");LOG4CPLUS_WARN(logger, "This is a WARN message");LOG4CPLUS_ERROR(logger, "This is a ERROR message");LOG4CPLUS_FATAL(logger, "This is a FATAL message"); } int main() {Logger root = Logger::getRoot();PropertyConfigurator::doConfigure("urconfig.properties");printDebug();return 0; }

輸出結(jié)果:

1. all_msgs.log 10-17-04 14:55:25,858 [1075298944] TRACE log <> - ENTER: ::printDebug() 10-17-04 14:55:25,871 [1075298944] DEBUG log <> - This is a DEBUG message 10-17-04 14:55:25,873 [1075298944] INFO log <> - This is a INFO message 10-17-04 14:55:25,873 [1075298944] WARN log <> - This is a WARN message 10-17-04 14:55:25,874 [1075298944] ERROR log <> - This is a ERROR message 10-17-04 14:55:25,874 [1075298944] FATAL log <> - This is a FATAL message 10-17-04 14:55:25,875 [1075298944] TRACE log <> - EXIT: ::printDebug()2. trace_msgs.log 10-17-04 14:55:25,858 [1075298944] TRACE log <> - ENTER: ::printDebug() 10-17-04 14:55:25,875 [1075298944] TRACE log <> - EXIT: ::printDebug()3. debug_info_msgs.log 10-17-04 14:55:25,871 [1075298944] DEBUG log <> - This is a DEBUG message 10-17-04 14:55:25,873 [1075298944] INFO log <> - This is a INFO message4. fatal_msgs.log 10-17-04 14:55:25,874 [1075298944] FATAL log <> - This is a FATAL message

8.3腳本配置的動態(tài)加載

   多線程版本的log4cplus提供了實(shí)用類ConfigureAndWatchThread,該類啟動線程對配置腳本進(jìn)行監(jiān)控,一旦發(fā)現(xiàn)配置腳本被更新則立刻重新加載配置。
   類ConfigureAndWatchThread的構(gòu)造函數(shù)定義為:
   ConfigureAndWatchThread(const log4cplus::tstring& propertyFile,
unsigned int millis = 60 * 1000);
   第一個參數(shù)propertyFile為配置腳本的路徑名,第二個參數(shù)為監(jiān)控時兩次更新檢查相隔的時間,單位為耗秒ms。

8.3.1 例10-使用線程監(jiān)控腳本的更新

#include <log4cplus/logger.h> #include <log4cplus/configurator.h> #include <log4cplus/helpers/loglog.h> #include <log4cplus/helpers/stringhelper.h>using namespace std; using namespace log4cplus; using namespace log4cplus::helpers;Logger log_1 = Logger::getInstance("test.log_1"); Logger log_2 = Logger::getInstance("test.log_2"); Logger log_3 = Logger::getInstance("test.log_3");void printMsgs(Logger& logger) {LOG4CPLUS_TRACE_METHOD(logger, "printMsgs()");LOG4CPLUS_DEBUG(logger, "printMsgs()");LOG4CPLUS_INFO(logger, "printMsgs()");LOG4CPLUS_WARN(logger, "printMsgs()");LOG4CPLUS_ERROR(logger, "printMsgs()"); }int main() {cout << "Entering main()..." << endl;LogLog::getLogLog()->setInternalDebugging(true);Logger root = Logger::getRoot();try {ConfigureAndWatchThread configureThread("log4cplus.properties", 5 * 1000);LOG4CPLUS_WARN(root, "Testing....")for(int i=0; i<100; ++i) {printMsgs(log_1);printMsgs(log_2);printMsgs(log_3);log4cplus::helpers::sleep(1);}}catch(...) {cout << "Exception..." << endl;LOG4CPLUS_FATAL(root, "Exception occured...")}cout << "Exiting main()..." << endl;return 0; } 以下是配置腳本log4cplus.properties的內(nèi)容。 log4cplus.rootLogger=INFO, STDOUT, R log4cplus.logger.test=WARN log4cplus.logger.test.log_1=FATAL log4cplus.logger.test.log_2=FATAL log4cplus.logger.test.log_3=WARNlog4cplus.appender.STDOUT=log4cplus::ConsoleAppender log4cplus.appender.STDOUT.layout=log4cplus::PatternLayout log4cplus.appender.STDOUT.layout.ConversionPattern=%d{%m/%d/%y %H:%M:%S} [%t] %-5p %c{2} %%%x%% - %m [%l]%nlog4cplus.appender.R=log4cplus::RollingFileAppender log4cplus.appender.R.File=output.log #log4cplus.appender.R.MaxFileSize=5MB log4cplus.appender.R.MaxFileSize=500KB log4cplus.appender.R.MaxBackupIndex=5 log4cplus.appender.R.layout=log4cplus::TTCCLayout

9 定制Log4cplus

9.1 定制日志級別

log4cplus支持日志級別的定制。如果需要定義自己的優(yōu)先級,則可以按以下步驟進(jìn)行定制。

(1) 定義新日志級別對應(yīng)的常量整數(shù)和輸出宏。

/** customloglevel.h*/ #include <log4cplus/logger.h> #include <log4cplus/helpers/loglog.h>using namespace log4cplus; using namespace log4cplus::helpers;const LogLevel CRITICAL_LOG_LEVEL = 45000;#define LOG4CPLUS_CRITICAL(logger, logEvent) \if(logger.isEnabledFor(CRITICAL_LOG_LEVEL)) { \log4cplus::tostringstream _log4cplus_buf; \_log4cplus_buf << logEvent; \logger.forcedLog(CRITICAL_LOG_LEVEL, _log4cplus_buf.str(), __FILE__, __LINE__); \}

(2)定義新日志級別對應(yīng)的字符串、常量整數(shù)與字符串之間的轉(zhuǎn)換函數(shù),定義自己的初始化器將轉(zhuǎn)換函數(shù)注冊到LogLevelManage。

/** customloglevel.cxx*/ #include "customloglevel.h"#define _CRITICAL_STRING "CRITICAL"tstring criticalToStringMethod(LogLevel ll) {if(ll == CRITICAL_LOG_LEVEL) {return _CRITICAL_STRING;}else {return tstring();} }LogLevel criticalFromStringMethod(const tstring& s) {if(s == _CRITICAL_STRING) return CRITICAL_LOG_LEVEL;return NOT_SET_LOG_LEVEL; }class CriticalLogLevelInitializer { public:CriticalLogLevelInitializer() {getLogLevelManager().pushToStringMethod(criticalToStringMethod);getLogLevelManager().pushFromStringMethod(criticalFromStringMethod);} };CriticalLogLevelInitializer criticalLogLevelInitializer_;

(3)使用新定義的日志級別

/** main.cxx*/ #include "customloglevel.h" #include <log4cplus/consoleappender.h> #include <iomanip> #include <iostream>using namespace std; using namespace log4cplus;int main() {SharedAppenderPtr append_1(new ConsoleAppender());append_1->setName("First");Logger::getRoot().addAppender(append_1);Logger root = Logger::getRoot();LOG4CPLUS_CRITICAL(root, "This is a new logginglevel")return 0; }

9.2 定制LogLog

   LogLog輸出信息中總是包含”log4cplus:”前綴,這是因?yàn)長ogLog在實(shí)現(xiàn)時候在構(gòu)造函數(shù)中進(jìn)行了硬編碼:

LogLog::LogLog() : mutex(LOG4CPLUS_MUTEX_CREATE),debugEnabled(false),quietMode(false),PREFIX( LOG4CPLUS_TEXT("log4cplus: ") ),WARN_PREFIX( LOG4CPLUS_TEXT("log4cplus:WARN ") ),ERR_PREFIX( LOG4CPLUS_TEXT("log4cplus:ERROR ") ) { }

可以把這些前綴換成自己需要的提示符號,然后重新編譯。

總結(jié)

以上是生活随笔為你收集整理的log4cplus指南的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

激情人妻另类人妻伦 | 中文字幕无码日韩欧毛 | 国产午夜无码精品免费看 | 久久99久久99精品中文字幕 | 香港三级日本三级妇三级 | 亚洲日本一区二区三区在线 | 色窝窝无码一区二区三区色欲 | 激情国产av做激情国产爱 | 夜夜高潮次次欢爽av女 | 日本欧美一区二区三区乱码 | 日本精品久久久久中文字幕 | 国产av无码专区亚洲awww | 少妇人妻大乳在线视频 | 妺妺窝人体色www在线小说 | 成人综合网亚洲伊人 | 中文字幕乱妇无码av在线 | 中文字幕乱妇无码av在线 | 国产精品二区一区二区aⅴ污介绍 | 在线观看欧美一区二区三区 | 亚洲色偷偷男人的天堂 | 亚无码乱人伦一区二区 | 中文无码精品a∨在线观看不卡 | 97夜夜澡人人爽人人喊中国片 | 理论片87福利理论电影 | 无码人妻黑人中文字幕 | 亚洲国产欧美在线成人 | 中文字幕av日韩精品一区二区 | av无码电影一区二区三区 | 国产精品高潮呻吟av久久4虎 | 亚洲成a人一区二区三区 | 亚洲码国产精品高潮在线 | 国产性生交xxxxx无码 | 色偷偷人人澡人人爽人人模 | 国产精品人妻一区二区三区四 | 丰满少妇熟乱xxxxx视频 | 国产成人精品三级麻豆 | 精品人妻中文字幕有码在线 | 2020久久超碰国产精品最新 | 国产一区二区三区四区五区加勒比 | 天堂а√在线地址中文在线 | 精品无码成人片一区二区98 | 中文字幕人妻无码一夲道 | 成人免费视频一区二区 | 高清不卡一区二区三区 | 久久久久成人片免费观看蜜芽 | 欧美日韩一区二区综合 | 色一情一乱一伦一区二区三欧美 | 国产精品丝袜黑色高跟鞋 | 亚洲日本在线电影 | 久久99久久99精品中文字幕 | 国产内射老熟女aaaa | 国产精品免费大片 | 久久久久国色av免费观看性色 | 亚洲国产一区二区三区在线观看 | 日日天日日夜日日摸 | 影音先锋中文字幕无码 | 全球成人中文在线 | 欧洲精品码一区二区三区免费看 | 亚洲中文字幕乱码av波多ji | 亚洲国产精品无码久久久久高潮 | 亚洲а∨天堂久久精品2021 | 无码毛片视频一区二区本码 | 久久久久久久人妻无码中文字幕爆 | 欧美日韩一区二区综合 | 99久久99久久免费精品蜜桃 | 亚洲国产欧美在线成人 | 无码av中文字幕免费放 | 日本熟妇乱子伦xxxx | 国产麻豆精品一区二区三区v视界 | 秋霞成人午夜鲁丝一区二区三区 | 午夜熟女插插xx免费视频 | 美女张开腿让人桶 | 成 人影片 免费观看 | 图片区 小说区 区 亚洲五月 | 强辱丰满人妻hd中文字幕 | 欧美人与善在线com | 精品人妻人人做人人爽 | 久久久久免费看成人影片 | 狂野欧美激情性xxxx | 国产另类ts人妖一区二区 | 扒开双腿疯狂进出爽爽爽视频 | 熟妇人妻无码xxx视频 | 国产精品无码一区二区三区不卡 | 日本丰满熟妇videos | 暴力强奷在线播放无码 | 图片小说视频一区二区 | 日本一本二本三区免费 | 精品偷自拍另类在线观看 | 欧美丰满少妇xxxx性 | 日韩人妻无码中文字幕视频 | 人妻天天爽夜夜爽一区二区 | 久久国产精品萌白酱免费 | 性做久久久久久久久 | 精品无码一区二区三区爱欲 | 久久亚洲精品成人无码 | 久久久久国色av免费观看性色 | 国产成人av免费观看 | 国产精品永久免费视频 | 99久久婷婷国产综合精品青草免费 | 噜噜噜亚洲色成人网站 | 国产亚洲日韩欧美另类第八页 | 国产亚洲精品久久久久久国模美 | 女人被男人爽到呻吟的视频 | 一本久道久久综合婷婷五月 | 日韩av无码中文无码电影 | 任你躁国产自任一区二区三区 | 国产精品亚洲一区二区三区喷水 | 精品国产乱码久久久久乱码 | 国产无遮挡吃胸膜奶免费看 | 国产精品国产三级国产专播 | 久久亚洲中文字幕无码 | 国产成人无码av一区二区 | 兔费看少妇性l交大片免费 | 亚洲色欲色欲天天天www | 亚洲精品一区二区三区婷婷月 | 国产手机在线αⅴ片无码观看 | 日韩av激情在线观看 | 福利一区二区三区视频在线观看 | 国产精品无码一区二区三区不卡 | а√资源新版在线天堂 | 国产精品igao视频网 | 在线a亚洲视频播放在线观看 | 国产成人一区二区三区在线观看 | 曰本女人与公拘交酡免费视频 | 免费人成在线观看网站 | 日本爽爽爽爽爽爽在线观看免 | 激情综合激情五月俺也去 | 内射巨臀欧美在线视频 | 国产黄在线观看免费观看不卡 | 97夜夜澡人人爽人人喊中国片 | 成人免费无码大片a毛片 | 午夜福利试看120秒体验区 | 亚洲午夜福利在线观看 | 国产精品人妻一区二区三区四 | 国产xxx69麻豆国语对白 | 亚洲性无码av中文字幕 | 成人影院yy111111在线观看 | 国产人妻精品一区二区三区 | 亚洲午夜福利在线观看 | 国产猛烈高潮尖叫视频免费 | 图片区 小说区 区 亚洲五月 | 99久久亚洲精品无码毛片 | 亚洲男女内射在线播放 | 18精品久久久无码午夜福利 | 人妻无码久久精品人妻 | 极品尤物被啪到呻吟喷水 | a在线观看免费网站大全 | 2020久久超碰国产精品最新 | 国产香蕉尹人综合在线观看 | 鲁大师影院在线观看 | 伊人久久大香线蕉av一区二区 | 欧美日本免费一区二区三区 | 精品久久久无码人妻字幂 | 人妻体内射精一区二区三四 | 伊人久久大香线蕉午夜 | 亚洲码国产精品高潮在线 | 99麻豆久久久国产精品免费 | 黑人玩弄人妻中文在线 | 久青草影院在线观看国产 | 久久久久国色av免费观看性色 | 日韩亚洲欧美精品综合 | 久久精品99久久香蕉国产色戒 | 精品厕所偷拍各类美女tp嘘嘘 | 色 综合 欧美 亚洲 国产 | 少妇太爽了在线观看 | 九月婷婷人人澡人人添人人爽 | 性做久久久久久久免费看 | 东北女人啪啪对白 | 亚洲成av人综合在线观看 | 亚洲日韩av一区二区三区中文 | 国产精品嫩草久久久久 | 蜜桃无码一区二区三区 | 亚洲日本一区二区三区在线 | 丝袜美腿亚洲一区二区 | 国产熟妇另类久久久久 | 日日夜夜撸啊撸 | 成在人线av无码免费 | 男女下面进入的视频免费午夜 | 一本加勒比波多野结衣 | 欧美老人巨大xxxx做受 | 精品国产av色一区二区深夜久久 | 熟妇人妻中文av无码 | 无码人妻少妇伦在线电影 | 国产九九九九九九九a片 | 亚洲の无码国产の无码影院 | 丰满少妇高潮惨叫视频 | 中文字幕精品av一区二区五区 | 色综合视频一区二区三区 | 波多野42部无码喷潮在线 | 欧美丰满熟妇xxxx性ppx人交 | 人妻有码中文字幕在线 | 三上悠亚人妻中文字幕在线 | 中文字幕人妻无码一区二区三区 | 少妇人妻偷人精品无码视频 | 性欧美videos高清精品 | 国产色在线 | 国产 | 免费网站看v片在线18禁无码 | 色一情一乱一伦 | 日本大乳高潮视频在线观看 | 免费网站看v片在线18禁无码 | 国产精品99爱免费视频 | 色综合久久88色综合天天 | 亚洲の无码国产の无码步美 | 成人精品视频一区二区三区尤物 | 亚洲乱亚洲乱妇50p | 麻豆国产人妻欲求不满 | 秋霞特色aa大片 | 午夜福利一区二区三区在线观看 | 国产人妻精品午夜福利免费 | 奇米影视7777久久精品 | 人妻天天爽夜夜爽一区二区 | 国产午夜无码视频在线观看 | 无套内射视频囯产 | 夜夜躁日日躁狠狠久久av | 免费观看的无遮挡av | 影音先锋中文字幕无码 | 国产成人无码区免费内射一片色欲 | 亚洲精品国偷拍自产在线麻豆 | 中文字幕av伊人av无码av | 国产麻豆精品一区二区三区v视界 | 扒开双腿疯狂进出爽爽爽视频 | 精品国偷自产在线 | 亲嘴扒胸摸屁股激烈网站 | 精品无人国产偷自产在线 | 九月婷婷人人澡人人添人人爽 | 欧美日韩亚洲国产精品 | 鲁大师影院在线观看 | 六月丁香婷婷色狠狠久久 | 扒开双腿吃奶呻吟做受视频 | 欧美人与动性行为视频 | 九一九色国产 | 妺妺窝人体色www婷婷 | 欧美人妻一区二区三区 | 无套内谢的新婚少妇国语播放 | 国内精品九九久久久精品 | 精品人人妻人人澡人人爽人人 | 色妞www精品免费视频 | 亚洲中文字幕久久无码 | 亚洲一区二区三区在线观看网站 | 国产人妻大战黑人第1集 | 国产农村乱对白刺激视频 | 亚洲码国产精品高潮在线 | 精品乱子伦一区二区三区 | 中文精品无码中文字幕无码专区 | 97夜夜澡人人爽人人喊中国片 | 天天综合网天天综合色 | 人人澡人人妻人人爽人人蜜桃 | 欧美日韩在线亚洲综合国产人 | 超碰97人人做人人爱少妇 | 国产97色在线 | 免 | 国产麻豆精品一区二区三区v视界 | 亚洲精品久久久久久一区二区 | www国产亚洲精品久久网站 | 精品乱子伦一区二区三区 | 国产免费观看黄av片 | 乱码av麻豆丝袜熟女系列 | 亚洲欧美国产精品久久 | 中文字幕乱码中文乱码51精品 | 亚洲成av人综合在线观看 | 欧美激情一区二区三区成人 | 日本熟妇浓毛 | 激情五月综合色婷婷一区二区 | 欧美人与禽zoz0性伦交 | 欧美野外疯狂做受xxxx高潮 | 中文字幕人妻无码一夲道 | 高中生自慰www网站 | 久久久久久亚洲精品a片成人 | 亚洲精品中文字幕乱码 | 亚洲日韩一区二区 | 亚洲国产精品一区二区美利坚 | 国产精品久久久久久亚洲毛片 | 麻豆成人精品国产免费 | 特大黑人娇小亚洲女 | 四虎影视成人永久免费观看视频 | 亚洲国产精品久久久久久 | 欧美性猛交xxxx富婆 | 无码av免费一区二区三区试看 | 香蕉久久久久久av成人 | 国产乱人偷精品人妻a片 | 亚洲一区二区三区香蕉 | 兔费看少妇性l交大片免费 | 久久亚洲日韩精品一区二区三区 | 亚洲狠狠婷婷综合久久 | 国产精品无码久久av | 久久久久亚洲精品男人的天堂 | 中文字幕乱码中文乱码51精品 | 亚洲日韩一区二区三区 | 成人免费无码大片a毛片 | 成人无码影片精品久久久 | 国产亚洲精品久久久久久久久动漫 | 免费观看的无遮挡av | 1000部啪啪未满十八勿入下载 | 青青青手机频在线观看 | 麻花豆传媒剧国产免费mv在线 | 中文字幕无码日韩专区 | 日日摸天天摸爽爽狠狠97 | 性啪啪chinese东北女人 | 青青久在线视频免费观看 | 曰韩少妇内射免费播放 | 国产精品久久久一区二区三区 | 精品亚洲韩国一区二区三区 | 亚洲欧美日韩综合久久久 | 欧美日韩视频无码一区二区三 | 日韩精品a片一区二区三区妖精 | 天堂а√在线地址中文在线 | 成人欧美一区二区三区黑人 | 99精品久久毛片a片 | 亚洲精品久久久久中文第一幕 | yw尤物av无码国产在线观看 | 久久久久成人精品免费播放动漫 | 亚洲人亚洲人成电影网站色 | 久久久久久国产精品无码下载 | 久久国产精品二国产精品 | 日本饥渴人妻欲求不满 | 大地资源中文第3页 | 伊在人天堂亚洲香蕉精品区 | 国产成人综合色在线观看网站 | 98国产精品综合一区二区三区 | 亚洲色欲色欲欲www在线 | 中文字幕日韩精品一区二区三区 | 久久久精品456亚洲影院 | 中文字幕无码av激情不卡 | 玩弄少妇高潮ⅹxxxyw | 欧美日韩精品 | 麻豆md0077饥渴少妇 | 无码任你躁久久久久久久 | 国产办公室秘书无码精品99 | 国产精华av午夜在线观看 | 久久国产精品_国产精品 | 亚洲中文字幕在线无码一区二区 | 色婷婷香蕉在线一区二区 | 97久久国产亚洲精品超碰热 | 最新版天堂资源中文官网 | 亚洲综合无码一区二区三区 | 乌克兰少妇性做爰 | 亚洲中文字幕va福利 | 国产高清不卡无码视频 | 丰满妇女强制高潮18xxxx | 精品久久久无码中文字幕 | 麻豆av传媒蜜桃天美传媒 | 在线看片无码永久免费视频 | 在线播放免费人成毛片乱码 | 精品少妇爆乳无码av无码专区 | 野外少妇愉情中文字幕 | 国产成人无码a区在线观看视频app | 亚洲午夜久久久影院 | 久久综合狠狠综合久久综合88 | 蜜臀aⅴ国产精品久久久国产老师 | 欧美丰满老熟妇xxxxx性 | 大地资源中文第3页 | 六十路熟妇乱子伦 | 国产午夜精品一区二区三区嫩草 | 波多野结衣av一区二区全免费观看 | 欧美丰满熟妇xxxx性ppx人交 | 久久精品女人的天堂av | 老头边吃奶边弄进去呻吟 | 国精产品一品二品国精品69xx | 色婷婷久久一区二区三区麻豆 | 牲交欧美兽交欧美 | 日韩人妻无码中文字幕视频 | 美女扒开屁股让男人桶 | 澳门永久av免费网站 | 国产性生交xxxxx无码 | 欧美丰满熟妇xxxx性ppx人交 | 真人与拘做受免费视频 | 学生妹亚洲一区二区 | 欧美国产日韩久久mv | 成熟妇人a片免费看网站 | 99久久精品国产一区二区蜜芽 | 国产精品毛多多水多 | 乱码av麻豆丝袜熟女系列 | 日日麻批免费40分钟无码 | 性史性农村dvd毛片 | 国产人妻精品午夜福利免费 | 亚洲精品久久久久久一区二区 | 欧美 日韩 人妻 高清 中文 | 男人和女人高潮免费网站 | 四虎国产精品一区二区 | 国产精品无套呻吟在线 | 国产午夜手机精彩视频 | 亚洲成a人一区二区三区 | 伊在人天堂亚洲香蕉精品区 | 亚洲国产综合无码一区 | 亚洲色欲久久久综合网东京热 | 性欧美牲交xxxxx视频 | 在线精品亚洲一区二区 | 国产又粗又硬又大爽黄老大爷视 | 亚洲七七久久桃花影院 | 国产97人人超碰caoprom | 免费人成在线视频无码 | 日本一卡2卡3卡四卡精品网站 | 欧美性猛交xxxx富婆 | 午夜熟女插插xx免费视频 | 又黄又爽又色的视频 | 波多野结衣一区二区三区av免费 | 人人妻人人澡人人爽欧美一区 | 婷婷丁香五月天综合东京热 | 国产成人av免费观看 | 99riav国产精品视频 | 久久综合给合久久狠狠狠97色 | 国产区女主播在线观看 | 丰腴饱满的极品熟妇 | 国产成人久久精品流白浆 | 国产成人综合美国十次 | 日韩欧美群交p片內射中文 | 无码精品国产va在线观看dvd | 欧美35页视频在线观看 | 国产精品高潮呻吟av久久 | 天天摸天天碰天天添 | 99久久精品无码一区二区毛片 | 精品欧美一区二区三区久久久 | 午夜无码区在线观看 | 日韩亚洲欧美精品综合 | 亚洲中文字幕乱码av波多ji | 国产精品久久久午夜夜伦鲁鲁 | 无码人妻少妇伦在线电影 | aⅴ亚洲 日韩 色 图网站 播放 | 亚洲成a人片在线观看无码3d | 亚洲色在线无码国产精品不卡 | 欧美丰满少妇xxxx性 | 亚洲精品午夜国产va久久成人 | 又大又黄又粗又爽的免费视频 | 国产猛烈高潮尖叫视频免费 | 日本大乳高潮视频在线观看 | 午夜理论片yy44880影院 | 亚洲熟熟妇xxxx | 欧美日韩色另类综合 | 亚洲国产av美女网站 | 久久视频在线观看精品 | 日日摸天天摸爽爽狠狠97 | 99久久人妻精品免费二区 | 成人免费视频视频在线观看 免费 | 久久精品国产日本波多野结衣 | 美女张开腿让人桶 | 亚洲男人av天堂午夜在 | 精品国产成人一区二区三区 | 国产乱码精品一品二品 | 色综合久久久久综合一本到桃花网 | 性欧美疯狂xxxxbbbb | 一二三四在线观看免费视频 | 国产亚洲欧美在线专区 | 色综合久久久久综合一本到桃花网 | 亚洲中文字幕在线观看 | 亚洲精品综合一区二区三区在线 | 成人一区二区免费视频 | 亚洲精品一区三区三区在线观看 | 大色综合色综合网站 | 搡女人真爽免费视频大全 | 国产成人精品优优av | 日韩人妻系列无码专区 | 久久精品女人的天堂av | 亚洲国产av美女网站 | 亚洲色无码一区二区三区 | 日日天日日夜日日摸 | 东京热一精品无码av | 天天拍夜夜添久久精品 | 丁香啪啪综合成人亚洲 | 亚洲aⅴ无码成人网站国产app | 伦伦影院午夜理论片 | 伊人久久大香线蕉av一区二区 | 中文字幕乱码人妻二区三区 | 午夜男女很黄的视频 | 四虎国产精品一区二区 | 亚洲欧美综合区丁香五月小说 | 丰满肥臀大屁股熟妇激情视频 | 色综合久久88色综合天天 | 内射后入在线观看一区 | 欧美成人午夜精品久久久 | 扒开双腿疯狂进出爽爽爽视频 | 久久精品国产一区二区三区肥胖 | 无码精品人妻一区二区三区av | 天天拍夜夜添久久精品 | 中文字幕乱码中文乱码51精品 | 国内综合精品午夜久久资源 | 久久久久99精品国产片 | 欧美日韩人成综合在线播放 | 亚洲中文字幕乱码av波多ji | 国产亚洲精品久久久久久大师 | 免费观看的无遮挡av | 久久精品中文字幕大胸 | 欧美35页视频在线观看 | 国产成人av免费观看 | 久久精品国产大片免费观看 | 精品熟女少妇av免费观看 | 国产人妻久久精品二区三区老狼 | 精品久久久久久人妻无码中文字幕 | 精品夜夜澡人妻无码av蜜桃 | 亚洲国产精品久久人人爱 | 丰满妇女强制高潮18xxxx | 波多野结衣av一区二区全免费观看 | 99视频精品全部免费免费观看 | 欧美黑人巨大xxxxx | 亚洲国产精品无码久久久久高潮 | 成人免费无码大片a毛片 | 国产成人精品视频ⅴa片软件竹菊 | 成人精品视频一区二区三区尤物 | 久久aⅴ免费观看 | 日韩av无码中文无码电影 | 久久综合给久久狠狠97色 | 成人三级无码视频在线观看 | 亚洲色大成网站www国产 | 在线а√天堂中文官网 | 国产亚洲日韩欧美另类第八页 | 内射老妇bbwx0c0ck | 乱人伦人妻中文字幕无码 | 人妻夜夜爽天天爽三区 | 国产精品亚洲综合色区韩国 | 丝袜 中出 制服 人妻 美腿 | 久久久精品成人免费观看 | 中文字幕日产无线码一区 | 漂亮人妻洗澡被公强 日日躁 | 国内揄拍国内精品少妇国语 | 亚洲人亚洲人成电影网站色 | 高潮毛片无遮挡高清免费视频 | 国产精品久久福利网站 | 亚洲精品美女久久久久久久 | 无码av最新清无码专区吞精 | 亚洲国产精品成人久久蜜臀 | 国产精品人人爽人人做我的可爱 | 久久久久99精品国产片 | 亚洲狠狠婷婷综合久久 | 99精品无人区乱码1区2区3区 | 九月婷婷人人澡人人添人人爽 | 性生交大片免费看l | 久久精品成人欧美大片 | 亚洲国产精品成人久久蜜臀 | 久精品国产欧美亚洲色aⅴ大片 | 国产精品嫩草久久久久 | 九九综合va免费看 | 欧美人与牲动交xxxx | 少妇一晚三次一区二区三区 | 97夜夜澡人人双人人人喊 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产一区二区不卡老阿姨 | 欧美人与动性行为视频 | 偷窥日本少妇撒尿chinese | 国产乱人偷精品人妻a片 | 人人妻人人澡人人爽欧美精品 | 精品国产一区二区三区av 性色 | 国产香蕉尹人视频在线 | 丁香花在线影院观看在线播放 | 国产人成高清在线视频99最全资源 | 欧美精品免费观看二区 | 最新国产乱人伦偷精品免费网站 | 18禁止看的免费污网站 | 99精品久久毛片a片 | 99久久人妻精品免费一区 | 中文字幕无码免费久久9一区9 | 国产精品久久精品三级 | 久久综合香蕉国产蜜臀av | 在线 国产 欧美 亚洲 天堂 | 好男人社区资源 | 精品亚洲成av人在线观看 | 综合激情五月综合激情五月激情1 | 国产真实夫妇视频 | 131美女爱做视频 | 亚洲熟女一区二区三区 | 午夜精品一区二区三区在线观看 | 成人性做爰aaa片免费看 | 久久综合激激的五月天 | 久久久久se色偷偷亚洲精品av | 欧美放荡的少妇 | 东京无码熟妇人妻av在线网址 | 性欧美videos高清精品 | 国产超级va在线观看视频 | 女人被爽到呻吟gif动态图视看 | 又色又爽又黄的美女裸体网站 | 久9re热视频这里只有精品 | 亚洲欧美中文字幕5发布 | 国产精品爱久久久久久久 | 亚洲 高清 成人 动漫 | 高清不卡一区二区三区 | 亚洲欧洲无卡二区视頻 | 在线精品亚洲一区二区 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 亚洲成av人综合在线观看 | 亚洲精品国产精品乱码不卡 | 日本一卡二卡不卡视频查询 | 丰满人妻一区二区三区免费视频 | 亚洲国产精品久久久久久 | 精品国产麻豆免费人成网站 | 一区二区三区乱码在线 | 欧洲 | 男女爱爱好爽视频免费看 | 男人的天堂av网站 | 国产精品久久久一区二区三区 | 日韩人妻少妇一区二区三区 | 99久久久无码国产aaa精品 | 性啪啪chinese东北女人 | 在线观看欧美一区二区三区 | 国产在线无码精品电影网 | 欧美成人午夜精品久久久 | 性色av无码免费一区二区三区 | 午夜丰满少妇性开放视频 | 一本精品99久久精品77 | 熟妇人妻激情偷爽文 | 中文毛片无遮挡高清免费 | 亚洲天堂2017无码中文 | 日韩欧美成人免费观看 | 欧美丰满熟妇xxxx性ppx人交 | 丰满少妇人妻久久久久久 | 天海翼激烈高潮到腰振不止 | 在线观看国产午夜福利片 | 亚洲热妇无码av在线播放 | 最近免费中文字幕中文高清百度 | 免费观看激色视频网站 | 国产熟女一区二区三区四区五区 | 76少妇精品导航 | 精品无码成人片一区二区98 | 日日麻批免费40分钟无码 | 在线欧美精品一区二区三区 | 丰满少妇弄高潮了www | 婷婷五月综合激情中文字幕 | 国产精品久久久一区二区三区 | 久久久精品国产sm最大网站 | 帮老师解开蕾丝奶罩吸乳网站 | 亚洲一区二区三区偷拍女厕 | 97久久国产亚洲精品超碰热 | 亚洲无人区午夜福利码高清完整版 | 成人欧美一区二区三区黑人免费 | 成人动漫在线观看 | 亚洲爆乳精品无码一区二区三区 | 亚洲无人区一区二区三区 | 国产精品内射视频免费 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 97久久精品无码一区二区 | 国内精品久久久久久中文字幕 | 中文字幕人妻丝袜二区 | 婷婷丁香六月激情综合啪 | 中文字幕av无码一区二区三区电影 | 99久久精品国产一区二区蜜芽 | 国产精品无码一区二区桃花视频 | 熟妇女人妻丰满少妇中文字幕 | 欧美一区二区三区视频在线观看 | 久久综合给合久久狠狠狠97色 | 夜夜夜高潮夜夜爽夜夜爰爰 | 国产精品嫩草久久久久 | 精品乱码久久久久久久 | 国产绳艺sm调教室论坛 | 日本xxxx色视频在线观看免费 | 熟女俱乐部五十路六十路av | 永久免费观看国产裸体美女 | 狂野欧美激情性xxxx | 5858s亚洲色大成网站www | 国产乱码精品一品二品 | 久久午夜无码鲁丝片秋霞 | 色综合久久久无码中文字幕 | 高潮毛片无遮挡高清免费视频 | 动漫av一区二区在线观看 | 在教室伦流澡到高潮hnp视频 | 国产激情精品一区二区三区 | 日韩av无码中文无码电影 | 乌克兰少妇xxxx做受 | 亚洲成av人综合在线观看 | 四虎影视成人永久免费观看视频 | 樱花草在线播放免费中文 | 日本高清一区免费中文视频 | 伊人久久大香线蕉亚洲 | 色一情一乱一伦一视频免费看 | 好男人www社区 | 久久国产精品精品国产色婷婷 | 性生交大片免费看女人按摩摩 | 一二三四在线观看免费视频 | 欧美成人高清在线播放 | 日韩人妻少妇一区二区三区 | 欧美肥老太牲交大战 | 免费网站看v片在线18禁无码 | 天海翼激烈高潮到腰振不止 | 色婷婷久久一区二区三区麻豆 | 亚洲の无码国产の无码步美 | 亚洲第一网站男人都懂 | 人人妻人人澡人人爽欧美一区 | 俺去俺来也在线www色官网 | 国产97人人超碰caoprom | 亚洲男人av天堂午夜在 | 亚洲色偷偷男人的天堂 | 麻豆精产国品 | 国产suv精品一区二区五 | 免费乱码人妻系列无码专区 | 日韩少妇白浆无码系列 | 在线天堂新版最新版在线8 | 亚洲欧美国产精品专区久久 | 无码国产乱人伦偷精品视频 | 好男人www社区 | 国产在线一区二区三区四区五区 | 国产无av码在线观看 | 偷窥日本少妇撒尿chinese | 久久久久国色av免费观看性色 | 亚洲а∨天堂久久精品2021 | 少女韩国电视剧在线观看完整 | 色综合久久久无码中文字幕 | 久久综合狠狠综合久久综合88 | 国产成人午夜福利在线播放 | 精品人妻中文字幕有码在线 | 国产乱人无码伦av在线a | 日日碰狠狠躁久久躁蜜桃 | 黄网在线观看免费网站 | 亚洲码国产精品高潮在线 | 四虎国产精品免费久久 | 国产在线一区二区三区四区五区 | 久久99精品国产麻豆蜜芽 | 久久亚洲a片com人成 | 人妻少妇精品久久 | 日韩av无码一区二区三区 | 性欧美疯狂xxxxbbbb | 牲欲强的熟妇农村老妇女 | 东京热无码av男人的天堂 | 日本精品高清一区二区 | 人妻中文无码久热丝袜 | 中文字幕乱码人妻二区三区 | 黄网在线观看免费网站 | 无码人妻出轨黑人中文字幕 | 国产精品无码成人午夜电影 | 奇米影视888欧美在线观看 | 亚洲一区二区三区国产精华液 | 中文字幕av无码一区二区三区电影 | 少妇厨房愉情理9仑片视频 | 国产口爆吞精在线视频 | 大地资源网第二页免费观看 | 国产偷自视频区视频 | 亚洲国产一区二区三区在线观看 | 国产舌乚八伦偷品w中 | 日本在线高清不卡免费播放 | 国产精品二区一区二区aⅴ污介绍 | 97夜夜澡人人双人人人喊 | 大胆欧美熟妇xx | 亚洲国产高清在线观看视频 | 国产精品国产自线拍免费软件 | 东京热无码av男人的天堂 | 中文无码伦av中文字幕 | 亚洲爆乳无码专区 | 成年美女黄网站色大免费视频 | www一区二区www免费 | 国产一区二区三区四区五区加勒比 | 久久久中文字幕日本无吗 | 国产精品沙发午睡系列 | 黑人粗大猛烈进出高潮视频 | 亚洲色www成人永久网址 | 六月丁香婷婷色狠狠久久 | 亚洲欧洲日本无在线码 | 免费观看激色视频网站 | aa片在线观看视频在线播放 | 天天燥日日燥 | 高清国产亚洲精品自在久久 | 久久亚洲中文字幕无码 | 亚洲爆乳大丰满无码专区 | 双乳奶水饱满少妇呻吟 | 国产超碰人人爽人人做人人添 | 久久久精品国产sm最大网站 | 欧洲熟妇精品视频 | 男人的天堂2018无码 | 麻豆精品国产精华精华液好用吗 | 水蜜桃色314在线观看 | 亚洲欧美色中文字幕在线 | 亚洲人亚洲人成电影网站色 | 无码乱肉视频免费大全合集 | 狠狠色噜噜狠狠狠狠7777米奇 | 在线精品亚洲一区二区 | 成人精品视频一区二区 | 高潮毛片无遮挡高清免费视频 | 国产女主播喷水视频在线观看 | 无码人妻精品一区二区三区不卡 | 久久久久99精品成人片 | 综合人妻久久一区二区精品 | 永久免费观看美女裸体的网站 | 两性色午夜视频免费播放 | 日日天干夜夜狠狠爱 | 中文字幕无码免费久久9一区9 | 3d动漫精品啪啪一区二区中 | 在线视频网站www色 | 麻豆国产人妻欲求不满谁演的 | 丰满人妻被黑人猛烈进入 | 国产无遮挡又黄又爽免费视频 | 香蕉久久久久久av成人 | 亚洲日韩av一区二区三区四区 | 久久精品中文字幕大胸 | 久久久婷婷五月亚洲97号色 | 久久久久久av无码免费看大片 | 伊在人天堂亚洲香蕉精品区 | 亚洲欧美中文字幕5发布 | 久久综合九色综合欧美狠狠 | 欧美zoozzooz性欧美 | 久久aⅴ免费观看 | 精品欧美一区二区三区久久久 | 久久久久免费精品国产 | 亚洲色无码一区二区三区 | 午夜性刺激在线视频免费 | 丰满少妇高潮惨叫视频 | 中文字幕+乱码+中文字幕一区 | 曰韩少妇内射免费播放 | 无码吃奶揉捏奶头高潮视频 | 亚洲va欧美va天堂v国产综合 | 亚洲最大成人网站 | 5858s亚洲色大成网站www | aⅴ亚洲 日韩 色 图网站 播放 | 国产综合久久久久鬼色 | 国产精华av午夜在线观看 | 国产女主播喷水视频在线观看 | 欧美午夜特黄aaaaaa片 | 亚洲国产成人av在线观看 | 国产人妻久久精品二区三区老狼 | 久久久久人妻一区精品色欧美 | 久久精品国产精品国产精品污 | 成人欧美一区二区三区黑人免费 | 熟妇人妻无乱码中文字幕 | 国产高清av在线播放 | 天天躁日日躁狠狠躁免费麻豆 | 国语自产偷拍精品视频偷 | 久久久精品人妻久久影视 | 久久久久人妻一区精品色欧美 | 欧美午夜特黄aaaaaa片 | 中文久久乱码一区二区 | 东京热一精品无码av | 999久久久国产精品消防器材 | 永久免费观看美女裸体的网站 | 夜夜躁日日躁狠狠久久av | 亚洲欧洲日本综合aⅴ在线 | 色爱情人网站 | а√天堂www在线天堂小说 | 奇米影视7777久久精品 | www一区二区www免费 | 97无码免费人妻超级碰碰夜夜 | 国内精品人妻无码久久久影院蜜桃 | 国内精品人妻无码久久久影院 | 欧美黑人乱大交 | 熟妇人妻无乱码中文字幕 | 天堂亚洲免费视频 | 国产欧美精品一区二区三区 | 国产精品igao视频网 | 图片区 小说区 区 亚洲五月 | 思思久久99热只有频精品66 | 亚洲成av人片在线观看无码不卡 | 香蕉久久久久久av成人 | 人妻互换免费中文字幕 | 纯爱无遮挡h肉动漫在线播放 | 国内精品久久毛片一区二区 | 黑人粗大猛烈进出高潮视频 | 国产精品国产三级国产专播 | 98国产精品综合一区二区三区 | 久久精品国产一区二区三区肥胖 | 久久精品一区二区三区四区 | 亚洲成a人片在线观看无码 | 午夜福利一区二区三区在线观看 | 亚洲阿v天堂在线 | 中文字幕无码av波多野吉衣 | 大肉大捧一进一出好爽视频 | 久久精品一区二区三区四区 | 国产真人无遮挡作爱免费视频 | 欧美精品无码一区二区三区 | 鲁一鲁av2019在线 | 欧美xxxx黑人又粗又长 | 亚洲欧美色中文字幕在线 | 亚洲色无码一区二区三区 | 久久久成人毛片无码 | 男人的天堂av网站 | 亚洲熟妇色xxxxx欧美老妇y | 高清国产亚洲精品自在久久 | 亚洲成在人网站无码天堂 | 3d动漫精品啪啪一区二区中 | 国产真人无遮挡作爱免费视频 | 蜜桃臀无码内射一区二区三区 | 午夜精品一区二区三区在线观看 | 国产97人人超碰caoprom | 中文字幕无码av激情不卡 | 国内少妇偷人精品视频 | 日韩精品无码免费一区二区三区 | 国色天香社区在线视频 | 免费观看黄网站 | 18无码粉嫩小泬无套在线观看 | 无码任你躁久久久久久久 | 无码一区二区三区在线观看 | 亚洲一区二区三区偷拍女厕 | 欧美变态另类xxxx | 美女张开腿让人桶 | 蜜臀aⅴ国产精品久久久国产老师 | 亚洲成av人影院在线观看 | 2019午夜福利不卡片在线 | 亚洲欧美精品aaaaaa片 | 久青草影院在线观看国产 | 国产精品久久久久7777 | 无码人妻丰满熟妇区五十路百度 | 亚洲欧美日韩成人高清在线一区 | √天堂中文官网8在线 | 久久久久亚洲精品中文字幕 | 精品国产成人一区二区三区 | 亚洲国产精品一区二区第一页 | 亚洲精品国产精品乱码不卡 | 午夜性刺激在线视频免费 | 亚洲另类伦春色综合小说 | 国产av一区二区精品久久凹凸 | 国产精品毛片一区二区 | 日韩精品久久久肉伦网站 | 色妞www精品免费视频 | 亚洲狠狠色丁香婷婷综合 | 中文字幕无码日韩专区 | 九九在线中文字幕无码 | 狠狠噜狠狠狠狠丁香五月 | 亚洲区欧美区综合区自拍区 | 亚洲精品国产第一综合99久久 | 国产精品嫩草久久久久 | 最新国产乱人伦偷精品免费网站 | 窝窝午夜理论片影院 | 国产色视频一区二区三区 | 99久久久无码国产精品免费 | 国产深夜福利视频在线 | 任你躁国产自任一区二区三区 | 帮老师解开蕾丝奶罩吸乳网站 | 国产午夜视频在线观看 | 久久zyz资源站无码中文动漫 | 精品成在人线av无码免费看 | 亚洲熟妇自偷自拍另类 | av无码电影一区二区三区 | 国产在热线精品视频 | 丰满人妻精品国产99aⅴ | 久激情内射婷内射蜜桃人妖 | ass日本丰满熟妇pics | 丰满少妇弄高潮了www | 欧美国产日韩亚洲中文 | 四虎影视成人永久免费观看视频 | av人摸人人人澡人人超碰下载 | 伊人久久大香线蕉亚洲 | 网友自拍区视频精品 | 无码一区二区三区在线观看 | 国产精品va在线播放 | 娇妻被黑人粗大高潮白浆 | 精品厕所偷拍各类美女tp嘘嘘 | 精品乱码久久久久久久 | 熟女体下毛毛黑森林 | 天天爽夜夜爽夜夜爽 | 中文无码精品a∨在线观看不卡 | 性欧美大战久久久久久久 | 99国产欧美久久久精品 | 18精品久久久无码午夜福利 | 亚洲国产成人a精品不卡在线 | 女高中生第一次破苞av | 欧美喷潮久久久xxxxx | 内射巨臀欧美在线视频 | 国产高清不卡无码视频 | 国内揄拍国内精品人妻 | 在线观看国产午夜福利片 | 精品无码成人片一区二区98 | 亚洲一区二区三区香蕉 | 中文字幕无码av波多野吉衣 | 日韩精品久久久肉伦网站 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 熟女俱乐部五十路六十路av | 色偷偷人人澡人人爽人人模 | 国产精品多人p群无码 | 老太婆性杂交欧美肥老太 | 青青青手机频在线观看 | av无码久久久久不卡免费网站 | 亚洲国产精品无码久久久久高潮 | 高清国产亚洲精品自在久久 | 国产精品亚洲一区二区三区喷水 | 国产成人人人97超碰超爽8 | 久久国产精品萌白酱免费 | 国产亚洲精品久久久久久 | 在线播放无码字幕亚洲 | 老子影院午夜精品无码 | 色妞www精品免费视频 | 99久久精品无码一区二区毛片 | 日日橹狠狠爱欧美视频 | 亚洲日韩乱码中文无码蜜桃臀网站 | 一本无码人妻在中文字幕免费 | 真人与拘做受免费视频一 | 乌克兰少妇性做爰 | 亚洲国产欧美在线成人 | 国产网红无码精品视频 | 精品国精品国产自在久国产87 | 久久综合香蕉国产蜜臀av | 日日躁夜夜躁狠狠躁 | 国内精品人妻无码久久久影院蜜桃 | 欧美熟妇另类久久久久久不卡 | 亚洲人成人无码网www国产 | 亚洲欧美精品aaaaaa片 | 奇米影视888欧美在线观看 | 免费观看激色视频网站 | 亚洲乱码国产乱码精品精 | 亚洲色大成网站www | 又湿又紧又大又爽a视频国产 | 老太婆性杂交欧美肥老太 | 在线精品亚洲一区二区 | 大色综合色综合网站 | 久久久久成人精品免费播放动漫 | 1000部夫妻午夜免费 | 久久视频在线观看精品 | 无遮挡国产高潮视频免费观看 | 97夜夜澡人人爽人人喊中国片 | 香蕉久久久久久av成人 | 亚洲精品一区二区三区在线 | 国产午夜精品一区二区三区嫩草 | 99在线 | 亚洲 | www国产亚洲精品久久网站 | 人妻无码αv中文字幕久久琪琪布 | 欧美乱妇无乱码大黄a片 | 亚洲精品国产精品乱码不卡 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 一本色道久久综合狠狠躁 | 久久精品中文字幕一区 | 青青草原综合久久大伊人精品 | 国产免费无码一区二区视频 | 人人澡人人妻人人爽人人蜜桃 | 日产精品高潮呻吟av久久 | 国产精品成人av在线观看 | 午夜无码区在线观看 | 18禁止看的免费污网站 | 色婷婷av一区二区三区之红樱桃 | 久久人人爽人人人人片 | 中文字幕亚洲情99在线 | 国产三级精品三级男人的天堂 | 精品成人av一区二区三区 | 无码精品人妻一区二区三区av | 成人免费视频在线观看 | 亚洲精品一区国产 | 日本丰满熟妇videos | 国产精品成人av在线观看 | 国内揄拍国内精品少妇国语 | 未满成年国产在线观看 | 久久综合给合久久狠狠狠97色 | 中文字幕无码热在线视频 | 国内精品人妻无码久久久影院蜜桃 | 日韩精品a片一区二区三区妖精 | 亚洲国产精品一区二区第一页 | 无码精品国产va在线观看dvd | 波多野结衣av在线观看 | 极品尤物被啪到呻吟喷水 | 97久久国产亚洲精品超碰热 | 狠狠噜狠狠狠狠丁香五月 | 国产人妻精品一区二区三区不卡 | 中文精品久久久久人妻不卡 | 娇妻被黑人粗大高潮白浆 | 99久久久无码国产aaa精品 | 国产绳艺sm调教室论坛 | 无套内谢老熟女 | 激情内射日本一区二区三区 | 色综合天天综合狠狠爱 | 人妻人人添人妻人人爱 | 亚洲乱码国产乱码精品精 | 成人影院yy111111在线观看 | 久久久www成人免费毛片 | 亚洲精品一区二区三区婷婷月 | 青青久在线视频免费观看 | 鲁一鲁av2019在线 | 中国女人内谢69xxxx | 久久久久久国产精品无码下载 | 熟妇人妻中文av无码 | 少妇人妻偷人精品无码视频 | 成人av无码一区二区三区 | √8天堂资源地址中文在线 | 久久亚洲中文字幕无码 | 性开放的女人aaa片 | 国产内射爽爽大片视频社区在线 | 牛和人交xxxx欧美 | 一本精品99久久精品77 | 蜜臀aⅴ国产精品久久久国产老师 | 成人试看120秒体验区 | 欧美一区二区三区视频在线观看 | 午夜理论片yy44880影院 | 亚洲精品国产a久久久久久 | 午夜福利试看120秒体验区 | 黑人大群体交免费视频 | 噜噜噜亚洲色成人网站 | 300部国产真实乱 | 亚洲爆乳无码专区 | 精品偷拍一区二区三区在线看 | 两性色午夜免费视频 | 少妇人妻偷人精品无码视频 | 国产口爆吞精在线视频 | 中文字幕乱码亚洲无线三区 | 沈阳熟女露脸对白视频 | 国产在热线精品视频 | 亚洲欧美精品伊人久久 | 久久综合狠狠综合久久综合88 | 亚洲人成影院在线观看 | 亚洲精品综合五月久久小说 | 2019nv天堂香蕉在线观看 | 蜜桃视频插满18在线观看 | 2019午夜福利不卡片在线 | 免费观看又污又黄的网站 | 国产乱人伦偷精品视频 | 人妻无码αv中文字幕久久琪琪布 | 国产又爽又黄又刺激的视频 | 美女张开腿让人桶 | 国产精品无码永久免费888 | 国产成人综合色在线观看网站 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 无码人妻丰满熟妇区毛片18 | 亚洲精品一区二区三区婷婷月 | 最新国产乱人伦偷精品免费网站 | 中文字幕无码热在线视频 | 国产高潮视频在线观看 | 青青草原综合久久大伊人精品 | 玩弄中年熟妇正在播放 | 亚洲熟悉妇女xxx妇女av | 熟女俱乐部五十路六十路av | 黄网在线观看免费网站 | 亚洲中文字幕久久无码 | 成人无码精品1区2区3区免费看 | 伊在人天堂亚洲香蕉精品区 | 色欲人妻aaaaaaa无码 | 国产人妻人伦精品1国产丝袜 | 亚洲中文无码av永久不收费 | 97久久国产亚洲精品超碰热 | 天堂在线观看www | 国产片av国语在线观看 | 国产欧美熟妇另类久久久 | 色婷婷久久一区二区三区麻豆 | 久久精品国产一区二区三区 | 九一九色国产 | 无码人妻丰满熟妇区毛片18 | 亚洲成a人片在线观看无码3d | 男女作爱免费网站 | 久久久久99精品成人片 | 亚洲精品欧美二区三区中文字幕 | 亚洲国产高清在线观看视频 | 国产乱人伦av在线无码 | 男人扒开女人内裤强吻桶进去 | 综合网日日天干夜夜久久 | 欧美喷潮久久久xxxxx | 伊人色综合久久天天小片 | 欧美性生交活xxxxxdddd | 国产精品无码成人午夜电影 | 国产无套内射久久久国产 | 欧美激情内射喷水高潮 | 中文字幕亚洲情99在线 | 久久人妻内射无码一区三区 | 日韩av无码一区二区三区不卡 | 97精品国产97久久久久久免费 | 两性色午夜视频免费播放 | 中文字幕无码日韩欧毛 | 伊在人天堂亚洲香蕉精品区 | 日本护士毛茸茸高潮 | 亚洲欧美色中文字幕在线 | 欧美日韩综合一区二区三区 | 欧美国产日产一区二区 | 久久精品中文字幕一区 | 国产亚洲精品久久久久久久久动漫 | 久久国内精品自在自线 | 麻花豆传媒剧国产免费mv在线 | 国产成人一区二区三区别 | 久久午夜无码鲁丝片 | 欧美zoozzooz性欧美 | 亚洲码国产精品高潮在线 | 欧美高清在线精品一区 | 亚洲男女内射在线播放 | 极品尤物被啪到呻吟喷水 | 天天拍夜夜添久久精品 | 欧洲欧美人成视频在线 | 女人高潮内射99精品 | √天堂资源地址中文在线 | 日韩精品成人一区二区三区 | 午夜丰满少妇性开放视频 | 久久综合九色综合97网 | 国产午夜无码视频在线观看 | 午夜理论片yy44880影院 | 天堂亚洲2017在线观看 | 老熟妇仑乱视频一区二区 | 国产无套粉嫩白浆在线 | 成人无码视频免费播放 | 国产莉萝无码av在线播放 | 色偷偷人人澡人人爽人人模 | 久久天天躁狠狠躁夜夜免费观看 | 国内精品人妻无码久久久影院 | 亚洲の无码国产の无码步美 | 久久久久国色av免费观看性色 | 纯爱无遮挡h肉动漫在线播放 | 亚洲娇小与黑人巨大交 | 国产女主播喷水视频在线观看 | 99久久精品无码一区二区毛片 | 高潮喷水的毛片 | 亚洲啪av永久无码精品放毛片 | 国内精品人妻无码久久久影院 | 极品尤物被啪到呻吟喷水 | 乱人伦人妻中文字幕无码久久网 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 3d动漫精品啪啪一区二区中 | 精品夜夜澡人妻无码av蜜桃 | 国产明星裸体无码xxxx视频 | 国产超级va在线观看视频 | 精品国偷自产在线 | 中文字幕日产无线码一区 | 国产午夜精品一区二区三区嫩草 | a在线观看免费网站大全 | 丝袜足控一区二区三区 | 我要看www免费看插插视频 | 少妇久久久久久人妻无码 | 麻豆成人精品国产免费 | 久久久久久久人妻无码中文字幕爆 | 国产精品无码mv在线观看 | 精品成人av一区二区三区 | 国产精品亚洲综合色区韩国 | 国产绳艺sm调教室论坛 | 久久久精品人妻久久影视 | 一本大道伊人av久久综合 | 亚洲精品鲁一鲁一区二区三区 | 国产内射爽爽大片视频社区在线 | 亚洲成a人片在线观看无码3d | 成人无码视频免费播放 | 女人和拘做爰正片视频 | 国産精品久久久久久久 | 欧美日韩久久久精品a片 | 人妻少妇被猛烈进入中文字幕 | 亚洲精品无码国产 | 一个人免费观看的www视频 | 亚洲一区二区三区国产精华液 | 婷婷综合久久中文字幕蜜桃三电影 | 欧美黑人巨大xxxxx | 真人与拘做受免费视频 | 18禁黄网站男男禁片免费观看 | 成人av无码一区二区三区 | 最新国产麻豆aⅴ精品无码 | 六月丁香婷婷色狠狠久久 | 300部国产真实乱 | 久久人妻内射无码一区三区 | 四虎影视成人永久免费观看视频 | 国产午夜无码精品免费看 | 99久久人妻精品免费二区 | 久久综合九色综合欧美狠狠 | 高潮毛片无遮挡高清免费 | 国产无av码在线观看 | 国产乱码精品一品二品 | av香港经典三级级 在线 | 色一情一乱一伦一视频免费看 | 久热国产vs视频在线观看 | 国产女主播喷水视频在线观看 | 国产精品久久久久久亚洲毛片 | 亚洲色欲色欲欲www在线 | 在线看片无码永久免费视频 | 国产精品久久久久久久影院 | 亚洲色在线无码国产精品不卡 | 精品乱子伦一区二区三区 | 黑人粗大猛烈进出高潮视频 | 中文毛片无遮挡高清免费 | 色欲av亚洲一区无码少妇 | 久久国产精品偷任你爽任你 | 国内精品人妻无码久久久影院蜜桃 | aⅴ在线视频男人的天堂 | 国产一区二区三区四区五区加勒比 | 欧美 日韩 人妻 高清 中文 | 乱人伦中文视频在线观看 | 国产精品免费大片 | 2020最新国产自产精品 | 玩弄中年熟妇正在播放 | 成人欧美一区二区三区黑人 | 国产97人人超碰caoprom | 在线精品亚洲一区二区 | 色狠狠av一区二区三区 | 亚洲经典千人经典日产 | 国产成人精品久久亚洲高清不卡 | 77777熟女视频在线观看 а天堂中文在线官网 | 无码人妻久久一区二区三区不卡 | 国产激情无码一区二区app | 久久久久国色av免费观看性色 | 一本色道久久综合狠狠躁 | 色一情一乱一伦一视频免费看 | 中文字幕无线码免费人妻 | 综合激情五月综合激情五月激情1 | 亚洲熟妇色xxxxx欧美老妇 | 日本丰满熟妇videos | 天堂亚洲2017在线观看 | 丰满少妇熟乱xxxxx视频 | 麻豆人妻少妇精品无码专区 | 国产av一区二区精品久久凹凸 | 日韩少妇白浆无码系列 | 色婷婷欧美在线播放内射 | 午夜福利试看120秒体验区 | 国产午夜亚洲精品不卡 | 人妻天天爽夜夜爽一区二区 | 国产成人一区二区三区别 | 午夜精品一区二区三区的区别 | 欧美人与禽zoz0性伦交 | 天堂а√在线中文在线 | 丰满少妇女裸体bbw | 又大又紧又粉嫩18p少妇 | 国产乱人伦av在线无码 | 亚洲欧美精品aaaaaa片 | 99精品无人区乱码1区2区3区 | 国产av剧情md精品麻豆 | 久久国产精品精品国产色婷婷 | 97夜夜澡人人双人人人喊 | 亚洲精品无码人妻无码 | 亚洲人成网站免费播放 | 国产精品亚洲一区二区三区喷水 | 小泽玛莉亚一区二区视频在线 | 亚洲va中文字幕无码久久不卡 | 亚洲国产精品久久久天堂 | 水蜜桃色314在线观看 | 日本免费一区二区三区最新 | 丝袜美腿亚洲一区二区 | 亚洲精品一区二区三区在线 | 少妇太爽了在线观看 | 国产精品视频免费播放 | 人妻少妇精品无码专区动漫 | 亚洲成av人片在线观看无码不卡 | 国产精品高潮呻吟av久久4虎 | 大肉大捧一进一出视频出来呀 | 在线 国产 欧美 亚洲 天堂 | 久久久久久av无码免费看大片 | 色婷婷综合中文久久一本 | 熟妇女人妻丰满少妇中文字幕 | 亚洲人成网站在线播放942 | 欧美成人免费全部网站 | 老熟妇仑乱视频一区二区 | 人妻少妇精品无码专区二区 | 少妇太爽了在线观看 | 国产乡下妇女做爰 | 免费男性肉肉影院 | 久久精品国产一区二区三区 | 国产亚洲tv在线观看 | 自拍偷自拍亚洲精品10p | 国产乱人伦偷精品视频 | 国产色在线 | 国产 | 黑人大群体交免费视频 | 久久国内精品自在自线 | 乱中年女人伦av三区 | 亚洲热妇无码av在线播放 | 中文字幕精品av一区二区五区 | 国内丰满熟女出轨videos | 丰满少妇弄高潮了www | 精品一区二区三区无码免费视频 | 色妞www精品免费视频 | 四虎国产精品一区二区 | 天堂а√在线中文在线 | 国产极品美女高潮无套在线观看 | 国产色精品久久人妻 | 国产特级毛片aaaaaa高潮流水 | 一本久久a久久精品vr综合 | 99久久久无码国产aaa精品 | 鲁鲁鲁爽爽爽在线视频观看 | 牛和人交xxxx欧美 | 国产午夜亚洲精品不卡下载 | 在线亚洲高清揄拍自拍一品区 | 色狠狠av一区二区三区 | 自拍偷自拍亚洲精品10p | 久久综合狠狠综合久久综合88 | 亚洲精品国偷拍自产在线麻豆 | 国产亲子乱弄免费视频 | 久久国产精品二国产精品 | 亚洲va欧美va天堂v国产综合 | 亚洲精品一区二区三区大桥未久 | 国产成人无码av在线影院 | 丰满少妇熟乱xxxxx视频 | 乱人伦人妻中文字幕无码久久网 | 国产亲子乱弄免费视频 | 成人片黄网站色大片免费观看 | 午夜理论片yy44880影院 | 国精品人妻无码一区二区三区蜜柚 | 77777熟女视频在线观看 а天堂中文在线官网 | 亚洲国产综合无码一区 | 少妇人妻av毛片在线看 | 色婷婷香蕉在线一区二区 | 久久99精品久久久久久 | 清纯唯美经典一区二区 | 亚洲国产精品无码久久久久高潮 | 亚洲中文字幕无码中字 | 精品国产国产综合精品 | 欧美精品免费观看二区 | 欧美性猛交xxxx富婆 | 一区二区三区高清视频一 | 国产国语老龄妇女a片 | 少妇被粗大的猛进出69影院 | 中文字幕av伊人av无码av | 亚洲 a v无 码免 费 成 人 a v | 亚洲综合无码一区二区三区 | 99riav国产精品视频 | 国产乱子伦视频在线播放 | 色欲综合久久中文字幕网 | 东京热无码av男人的天堂 | 国产精品丝袜黑色高跟鞋 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 国产精品久久久 | a在线观看免费网站大全 | 国产乱人偷精品人妻a片 | 色一情一乱一伦一区二区三欧美 | 无码av中文字幕免费放 | 国产97人人超碰caoprom | 日本肉体xxxx裸交 | 亚洲成av人在线观看网址 | 国产情侣作爱视频免费观看 | 成人欧美一区二区三区黑人免费 | 四十如虎的丰满熟妇啪啪 | 成人免费视频在线观看 | 亚洲精品一区三区三区在线观看 | 亚洲色无码一区二区三区 | 精品日本一区二区三区在线观看 | 99久久婷婷国产综合精品青草免费 | 国产亚洲欧美在线专区 | 高潮毛片无遮挡高清免费视频 | aⅴ亚洲 日韩 色 图网站 播放 | 亚洲国产精品一区二区第一页 | 麻豆果冻传媒2021精品传媒一区下载 | 久久视频在线观看精品 | 色综合天天综合狠狠爱 | 男女作爱免费网站 | 成年美女黄网站色大免费全看 | 亚洲小说图区综合在线 | 亚洲一区二区三区播放 | 久久久精品456亚洲影院 | 亚洲人成影院在线观看 | 欧洲熟妇色 欧美 | 国产成人综合美国十次 | 精品国产麻豆免费人成网站 | 激情国产av做激情国产爱 | 亚洲伊人久久精品影院 | 最近中文2019字幕第二页 | 欧美精品国产综合久久 | 久久综合香蕉国产蜜臀av | 麻豆精品国产精华精华液好用吗 | 日本饥渴人妻欲求不满 | 高潮毛片无遮挡高清免费视频 | 国产精品99爱免费视频 | 久久亚洲国产成人精品性色 | 特黄特色大片免费播放器图片 | 久久精品国产大片免费观看 | 亚洲va欧美va天堂v国产综合 | 久久99精品久久久久久动态图 | 日韩人妻系列无码专区 | 国产精品理论片在线观看 | 国产人妖乱国产精品人妖 | 最新国产麻豆aⅴ精品无码 | 国产高清不卡无码视频 | 成 人影片 免费观看 | 国产人妻人伦精品1国产丝袜 | 国产精品久久精品三级 | 久久久久久a亚洲欧洲av冫 | 国产精品办公室沙发 | 欧美大屁股xxxxhd黑色 | 国产精品丝袜黑色高跟鞋 | 装睡被陌生人摸出水好爽 | 国产激情综合五月久久 | 精品国产av色一区二区深夜久久 | 国产欧美精品一区二区三区 | 国产疯狂伦交大片 | 亚洲无人区午夜福利码高清完整版 | 国产在线精品一区二区三区直播 | 久久精品中文字幕大胸 | 国产凸凹视频一区二区 | 国产色在线 | 国产 | 国产乡下妇女做爰 | 日韩欧美中文字幕在线三区 | 久久人妻内射无码一区三区 | 中文精品久久久久人妻不卡 | 国产成人精品必看 | 永久免费精品精品永久-夜色 | 国产性生交xxxxx无码 | 图片区 小说区 区 亚洲五月 | 国产成人一区二区三区别 | 俄罗斯老熟妇色xxxx | 亚洲日韩一区二区三区 | 鲁鲁鲁爽爽爽在线视频观看 | 精品久久8x国产免费观看 | 一本久久a久久精品亚洲 | 小泽玛莉亚一区二区视频在线 | 欧美国产日韩亚洲中文 | 88国产精品欧美一区二区三区 | 男人的天堂2018无码 | 国产精品国产三级国产专播 | 国产精品多人p群无码 | 少妇高潮一区二区三区99 | 蜜桃臀无码内射一区二区三区 | 鲁大师影院在线观看 | 最新国产麻豆aⅴ精品无码 | 国产美女极度色诱视频www | а天堂中文在线官网 | 人人妻人人澡人人爽欧美一区九九 | 精品久久综合1区2区3区激情 | 国产精品久久久 | 国产亚洲精品久久久久久大师 | 精品熟女少妇av免费观看 | 99久久人妻精品免费一区 | 亚洲精品国偷拍自产在线麻豆 | 小鲜肉自慰网站xnxx | 国内精品久久毛片一区二区 | 无码任你躁久久久久久久 | 国产亲子乱弄免费视频 | 自拍偷自拍亚洲精品10p | 中文字幕av伊人av无码av | 亚洲区小说区激情区图片区 | 国产特级毛片aaaaaa高潮流水 | 美女黄网站人色视频免费国产 | 亚洲啪av永久无码精品放毛片 | 无套内谢老熟女 | 自拍偷自拍亚洲精品被多人伦好爽 | 午夜无码人妻av大片色欲 | 好屌草这里只有精品 | 中国女人内谢69xxxxxa片 | 99久久精品国产一区二区蜜芽 | 成 人影片 免费观看 | 露脸叫床粗话东北少妇 | 狠狠色色综合网站 | 亚洲精品国产精品乱码不卡 | 亚洲中文字幕久久无码 | 成年美女黄网站色大免费全看 | 日韩精品a片一区二区三区妖精 | 亚洲一区二区三区含羞草 | 久久无码专区国产精品s | 久久精品99久久香蕉国产色戒 | 97夜夜澡人人双人人人喊 | 亚洲国产精品一区二区第一页 | 久久久久成人精品免费播放动漫 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 欧洲美熟女乱又伦 | 丝袜美腿亚洲一区二区 | 日日摸夜夜摸狠狠摸婷婷 | 任你躁国产自任一区二区三区 | 国产精品-区区久久久狼 | 国产成人一区二区三区别 | 熟女少妇在线视频播放 | 国产97色在线 | 免 | 国产三级精品三级男人的天堂 | 久激情内射婷内射蜜桃人妖 | 国产午夜精品一区二区三区嫩草 | 中文字幕 亚洲精品 第1页 | 极品尤物被啪到呻吟喷水 | 国产精品久久福利网站 | 内射爽无广熟女亚洲 | 亚洲午夜福利在线观看 | 乱人伦中文视频在线观看 | 国产手机在线αⅴ片无码观看 | 亚洲国产欧美日韩精品一区二区三区 | 日本一区二区更新不卡 | 久久精品女人天堂av免费观看 | 欧美 丝袜 自拍 制服 另类 | 免费看男女做好爽好硬视频 | 国产艳妇av在线观看果冻传媒 | 强辱丰满人妻hd中文字幕 | 午夜成人1000部免费视频 | 无码中文字幕色专区 | 日本精品少妇一区二区三区 | 久久久亚洲欧洲日产国码αv | 日日噜噜噜噜夜夜爽亚洲精品 | 一本色道婷婷久久欧美 | 澳门永久av免费网站 | 99久久久无码国产精品免费 | av人摸人人人澡人人超碰下载 | 麻豆国产丝袜白领秘书在线观看 | 国产偷自视频区视频 | 国产精品福利视频导航 | 亚洲自偷自拍另类第1页 | 中文亚洲成a人片在线观看 | 久久国产精品_国产精品 | 欧美性生交活xxxxxdddd | 麻豆果冻传媒2021精品传媒一区下载 | 少妇无码av无码专区在线观看 | 东京一本一道一二三区 | 精品乱子伦一区二区三区 | 国产激情精品一区二区三区 | 亚洲人亚洲人成电影网站色 | 人妻天天爽夜夜爽一区二区 | 久久久久se色偷偷亚洲精品av | 狠狠色色综合网站 | 在线看片无码永久免费视频 | 色婷婷综合中文久久一本 | 日本一区二区三区免费播放 | 日本免费一区二区三区最新 | 久久99精品久久久久久 | 青草视频在线播放 | 无人区乱码一区二区三区 | 人人妻在人人 | 88国产精品欧美一区二区三区 | 少妇久久久久久人妻无码 | 国产成人一区二区三区别 | 国产精品理论片在线观看 | 欧美一区二区三区视频在线观看 | 日日摸夜夜摸狠狠摸婷婷 | 日日麻批免费40分钟无码 | 日本精品久久久久中文字幕 | 国产一区二区三区影院 | 精品熟女少妇av免费观看 | 少妇邻居内射在线 | 久久久av男人的天堂 | 少妇性荡欲午夜性开放视频剧场 | 亚洲日韩中文字幕在线播放 | 亚洲成av人影院在线观看 | 日日摸夜夜摸狠狠摸婷婷 | 7777奇米四色成人眼影 | 色狠狠av一区二区三区 | 九九热爱视频精品 | 久久国产精品_国产精品 | 九九久久精品国产免费看小说 | 爽爽影院免费观看 | 国内精品久久久久久中文字幕 | 久久www免费人成人片 | 97夜夜澡人人爽人人喊中国片 | 色一情一乱一伦一区二区三欧美 | 18精品久久久无码午夜福利 | 国产精品无码一区二区三区不卡 | 欧美日本日韩 | 国产一区二区三区四区五区加勒比 | 成人综合网亚洲伊人 | 中文字幕无线码免费人妻 | 久久久精品人妻久久影视 | 国产精品久久久久7777 | 偷窥日本少妇撒尿chinese | 欧美老人巨大xxxx做受 | 性欧美熟妇videofreesex | 亚洲精品一区二区三区大桥未久 | 国产莉萝无码av在线播放 | 伊人久久大香线蕉午夜 | 麻豆av传媒蜜桃天美传媒 | 乱人伦人妻中文字幕无码久久网 | 国产绳艺sm调教室论坛 | 久久精品成人欧美大片 | 精品人妻人人做人人爽 | 亚洲精品一区二区三区在线观看 | 国产三级久久久精品麻豆三级 | 国产激情无码一区二区app | 无码任你躁久久久久久久 | 亚洲精品一区二区三区婷婷月 | 亚洲人成人无码网www国产 | 国产两女互慰高潮视频在线观看 | 婷婷五月综合激情中文字幕 | 少妇高潮一区二区三区99 | 久久无码专区国产精品s | 国产激情艳情在线看视频 | 男女猛烈xx00免费视频试看 | 欧美日韩一区二区免费视频 | 国产舌乚八伦偷品w中 | 亚洲国产精品久久人人爱 | 久久国产精品_国产精品 | 人人爽人人爽人人片av亚洲 | 久久久国产精品无码免费专区 | 婷婷综合久久中文字幕蜜桃三电影 | 少女韩国电视剧在线观看完整 | 丰满肥臀大屁股熟妇激情视频 | 99久久久无码国产精品免费 | 国产麻豆精品一区二区三区v视界 | 国产精品久免费的黄网站 | 国产人妻精品一区二区三区 | 最新国产麻豆aⅴ精品无码 | a片在线免费观看 | 久久精品女人天堂av免费观看 | 婷婷色婷婷开心五月四房播播 | 国产精品手机免费 | 人妻aⅴ无码一区二区三区 | 丰满少妇人妻久久久久久 | 白嫩日本少妇做爰 | 免费无码一区二区三区蜜桃大 | 中文字幕乱码中文乱码51精品 | 午夜精品久久久久久久久 | 久久久无码中文字幕久... | 在线亚洲高清揄拍自拍一品区 | 国产午夜精品一区二区三区嫩草 | 日韩成人一区二区三区在线观看 | 欧美兽交xxxx×视频 | 高潮喷水的毛片 | 亚洲精品成人福利网站 | 国产成人亚洲综合无码 | 好爽又高潮了毛片免费下载 | 欧美自拍另类欧美综合图片区 | 扒开双腿疯狂进出爽爽爽视频 | 成熟女人特级毛片www免费 | 无码人妻丰满熟妇区五十路百度 | 国产精品久久国产三级国 | 波多野结衣av一区二区全免费观看 | 成 人 免费观看网站 | 又大又紧又粉嫩18p少妇 | 无码人妻久久一区二区三区不卡 | 亚洲国产一区二区三区在线观看 | 国产特级毛片aaaaaaa高清 | 一本色道久久综合狠狠躁 | 久久成人a毛片免费观看网站 | 久久久久久国产精品无码下载 | 日韩精品无码一区二区中文字幕 | 亚洲国产精品久久久久久 | 女人被爽到呻吟gif动态图视看 | 亚洲精品国产精品乱码视色 | 在线а√天堂中文官网 | 国产凸凹视频一区二区 | 欧美亚洲日韩国产人成在线播放 | 日韩精品a片一区二区三区妖精 | 日本www一道久久久免费榴莲 | 久久久久成人片免费观看蜜芽 | 亚洲综合在线一区二区三区 | 国产精品手机免费 | 伊人色综合久久天天小片 | 青春草在线视频免费观看 |