18岁成人毛片_第四色在线视频_国产又粗又硬视频_99热这里只有精品3_亚洲国产无线乱码在线观看 _中文字幕乱码在线观看_男人草女人视频_国产伦精品一区二区三区视频痴汉_妞干网这里只有精品_久草视频免费在线

極客小將

您現在的位置是:首頁 » python編程資訊

資訊內容

了解python 中日志異步發送到遠程服務器

極客小將2021-01-19-
簡介python視頻教程欄目了解python中日志異步發送到遠程服務器的方法。在python中使用日志最常用的方式就是在控制臺和文件中輸出日志了,logging模塊也很好的提供的相應的類,使用起來也非常方便,但是有時我們可能會有一些需求,如還需要將日志發送到遠端,或者直接寫入數據庫,這種需求該如何實現呢

python視頻教程欄目了解python中日志異步發送到遠程服務器的方法。Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

在python中使用日志**常用的方式就是在控制臺和文件中輸出日志了,logging模塊也很好的提供的相應的類,使用起來也非常方便,但是有時我們可能會有一些需求,如還需要將日志發送到遠端,或者直接寫入數據庫,這種需求該如何實現呢?Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

一、StreamHandler和FileHandler

首先我們先來寫一套簡單輸出到cmd和文件中的代碼Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

# -*- coding: utf-8 -*-""" ------------------------------------------------- File Name: loger Description : Author : yangyanxing date: 2020/9/23 ------------------------------------------------- """import loggingimport sysimport os# 初始化loggerlogger = logging.getLogger("yyx") logger.setLevel(logging.DEBUG)# 設置日志格式fmt = logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S')# 添加cmd handlercmd_handler = logging.StreamHandler(sys.stdout) cmd_handler.setLevel(logging.DEBUG) cmd_handler.setFormatter(fmt)# 添加文件的handlerlogpath = os.path.join(os.getcwd(), 'debug.log') file_handler = logging.FileHandler(logpath) file_handler.setLevel(logging.DEBUG) file_handler.setFormatter(fmt)# 將cmd和file handler添加到logger中logger.addHandler(cmd_handler) logger.addHandler(file_handler) logger.debug("今天天氣不錯")復制代碼

首先初始化一個logger, 并且設置它的日志級別是DEBUG,然后添初始化了 cmd_handler和 file_handler, **后將它們添加到logger中, 運行腳本,會在cmd中打印出 [2020-09-23 10:45:56] [DEBUG] 今天天氣不錯 且會寫入到當前目錄下的debug.log文件中.Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

二、添加HTTPHandler

如果想要在記錄時將日志發送到遠程服務器上,可以添加一個 HTTPHandler , 在python標準庫logging.handler中,已經為我們定義好了很多handler,有些我們可以直接用,本地使用tornado寫一個接收日志的接口,將接收到的參數全都打印出來Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

# 添加一個httphandlerimport logging.handlers http_handler = logging.handlers.HTTPHandler(r"127.0.0.1:1987", '/api/log/get') http_handler.setLevel(logging.DEBUG) http_handler.setFormatter(fmt) logger.addHandler(http_handler) logger.debug("今天天氣不錯")復制代碼

結果在服務端我們收到了很多信息Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

{ 'name': [b 'yyx'], 'msg': [b 'xe4xbbx8axe5xa4xa9xe5xa4xa9xe6xb0x94xe4xb8x8dxe9x94x99'], 'args': [b '()'], 'levelname': [b 'DEBUG'], 'levelno': [b '10'], 'pathname': [b 'I:/workplace/yangyanxing/test/loger.py'], 'filename': [b 'loger.py'], 'module': [b 'loger'], 'exc_info': [b 'None'], 'exc_text': [b 'None'], 'stack_info': [b 'None'], 'lineno': [b '41'], 'funcName': [b '<module>'], 'created': [b '1600831054.8881223'], 'msecs': [b '888.1223201751709'], 'relativeCreated': [b '22.99976348876953'], 'thread': [b '14876'], 'threadName': [b 'MainThread'], 'processName': [b 'MainProcess'], 'process': [b '8648'], 'message': [b 'xe4xbbx8axe5xa4xa9xe5xa4xa9xe6xb0x94xe4xb8x8dxe9x94x99'], 'asctime': [b '2020-09-23 11:17:34'] }復制代碼

可以說是信息非常之多,但是卻并不是我們想要的樣子,我們只是想要類似于 [2020-09-23 10:45:56] [DEBUG] 今天天氣不錯 這樣的日志.Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

logging.handlers.HTTPHandler 只是簡單的將日志所有信息發送給服務端,至于服務端要怎么組織內容是由服務端來完成. 所以我們可以有兩種方法,一種是改服務端代碼,根據傳過來的日志信息重新組織一下日志內容, 第二種是我們重新寫一個類,讓它在發送的時候將重新格式化日志內容發送到服務端.Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

我們采用第二種方法,因為這種方法比較靈活, 服務端只是用于記錄,發送什么內容應該是由客戶端來決定。Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

我們需要重新定義一個類,我們可以參考logging.handlers.HTTPHandler 這個類,重新寫一個httpHandler類Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

每個日志類都需要重寫emit方法,記錄日志時真正要執行是也就是這個emit方法 Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

class CustomHandler(logging.Handler): def __init__(self, host, uri, method="POST"): logging.Handler.__init__(self) self.url = "%s/%s" % (host, uri) method = method.upper() if method not in ["GET", "POST"]: raise ValueError("method must be GET or POST") self.method = method def emit(self, record): ''' :param record: :return: ''' msg = self.format(record) if self.method == "GET": if (self.url.find("?") >= 0): sep = '&' else: sep = '?' url = self.url + "%c%s" % (sep, urllib.parse.urlencode({"log": msg})) requests.get(url, timeout=1) else: headers = { "Content-type": "application/x-www-form-urlencoded", "Content-length": str(len(msg)) } requests.post(self.url, data={'log': msg}, headers=headers, timeout=1)復制代碼

上面代碼中有一行定義發送的參數 msg = self.format(record)Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

這行代碼表示,將會根據日志對象設置的格式返回對應的內容. 之后再將內容通過requests庫進行發送,無論使用get 還是post方式,服務端都可以正常的接收到日志Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

[2020-09-23 11:43:50] [DEBUG] 今天天氣不錯Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

三、異步的發送遠程日志

現在我們考慮一個問題,當日志發送到遠程服務器過程中,如果遠程服務器處理的很慢,會耗費一定的時間,那么這時記錄日志就會都變慢Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

修改服務器日志處理類,讓其停頓5秒鐘,模擬長時間的處理流程Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

async def post(self): print(self.getParam('log')) await asyncio.sleep(5) self.write({"msg": 'ok'})復制代碼

此時我們再打印上面的日志Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

logger.debug("今天天氣不錯") logger.debug("是風和日麗的")復制代碼

得到的輸出為Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

[2020-09-23 11:47:33] [DEBUG] 今天天氣不錯 [2020-09-23 11:47:38] [DEBUG] 是風和日麗的復制代碼

我們注意到,它們的時間間隔也是5秒。Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

那么現在問題來了,原本只是一個記錄日志,現在卻成了拖累整個腳本的累贅,所以我們需要異步的來處理遠程寫日志。Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

3.1 使用多線程處理

首先想的是應該是用多線程來執行發送日志方法Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

def emit(self, record): msg = self.format(record) if self.method == "GET": if (self.url.find("?") >= 0): sep = '&' else: sep = '?' url = self.url + "%c%s" % (sep, urllib.parse.urlencode({"log": msg})) t = threading.Thread(target=requests.get, args=(url,)) t.start() else: headers = { "Content-type": "application/x-www-form-urlencoded", "Content-length": str(len(msg)) } t = threading.Thread(target=requests.post, args=(self.url,), kwargs={"data":{'log': msg}, "headers":headers}) t.start()復制代碼

這種方法是可以達到不阻塞主目的,但是每打印一條日志就需要開啟一個線程,也是挺浪費資源的。我們也可以使用線程池來處理Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

3.2 使用線程池處理

python 的 concurrent.futures 中有ThreadPoolExecutor, ProcessPoolExecutor類,是線程池和進程池,就是在初始化的時候先定義幾個線程,之后讓這些線程來處理相應的函數,這樣不用每次都需要新創建線程Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

線程池的基本使用Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

exector = ThreadPoolExecutor(max_workers=1) # 初始化一個線程池,只有一個線程exector.submit(fn, args, kwargs) # 將函數submit到線程池中復制代碼

如果線程池中有n個線程,當提交的task數量大于n時,則多余的task將放到隊列中.Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

再次修改上面的emit函數Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

exector = ThreadPoolExecutor(max_workers=1)def emit(self, record): msg = self.format(record) timeout = aiohttp.ClientTimeout(total=6) if self.method == "GET": if (self.url.find("?") >= 0): sep = '&' else: sep = '?' url = self.url + "%c%s" % (sep, urllib.parse.urlencode({"log": msg})) exector.submit(requests.get, url, timeout=6) else: headers = { "Content-type": "application/x-www-form-urlencoded", "Content-length": str(len(msg)) } exector.submit(requests.post, self.url, data={'log': msg}, headers=headers, timeout=6)復制代碼

這里為什么要只初始化一個只有一個線程的線程池? 因為這樣的話可以保證先進隊列里的日志會先被發送,如果池子中有多個線程,則不一定保證順序了。Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

3.3 使用異步aiohttp庫來發送請求

上面的CustomHandler類中的emit方法使用的是requests.post來發送日志,這個requests本身是阻塞運行的,也正上由于它的存在,才使得腳本卡了很長時間,所們我們可以將阻塞運行的requests庫替換為異步的aiohttp來執行get和post方法, 重寫一個CustomHandler中的emit方法Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

class CustomHandler(logging.Handler): def __init__(self, host, uri, method="POST"): logging.Handler.__init__(self) self.url = "%s/%s" % (host, uri) method = method.upper() if method not in ["GET", "POST"]: raise ValueError("method must be GET or POST") self.method = method async def emit(self, record): msg = self.format(record) timeout = aiohttp.ClientTimeout(total=6) if self.method == "GET": if (self.url.find("?") >= 0): sep = '&' else: sep = '?' url = self.url + "%c%s" % (sep, urllib.parse.urlencode({"log": msg})) async with aiohttp.ClientSession(timeout=timeout) as session: async with session.get(self.url) as resp: print(await resp.text()) else: headers = { "Content-type": "application/x-www-form-urlencoded", "Content-length": str(len(msg)) } async with aiohttp.ClientSession(timeout=timeout, headers=headers) as session: async with session.post(self.url, data={'log': msg}) as resp: print(await resp.text())復制代碼

這時代碼執行崩潰了Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

C:Python37liblogging\__init__.py:894: RuntimeWarning: coroutine 'CustomHandler.emit' was never awaited self.emit(record) RuntimeWarning: Enable tracemalloc to get the object allocation traceback復制代碼

服務端也沒有收到發送日志的請求。Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

究其原因是由于emit方法中使用async with session.post 函數,它需要在一個使用async 修飾的函數里執行,所以修改emit函數,使用async來修飾,這里emit函數變成了異步的函數, 返回的是一個coroutine 對象,要想執行coroutine對象,需要使用await, 但是腳本里卻沒有在哪里調用 await emit() ,所以崩潰信息中顯示coroutine 'CustomHandler.emit' was never awaited.Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

既然emit方法返回的是一個coroutine對象,那么我們將它放一個loop中執行Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

async def main(): await logger.debug("今天天氣不錯") await logger.debug("是風和日麗的") loop = asyncio.get_event_loop() loop.run_until_complete(main())復制代碼

執行依然報錯Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

raise TypeError('An asyncio.Future, a coroutine or an awaitable is '復制代碼

意思是需要的是一個coroutine,但是傳進來的對象不是。Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

這似乎就沒有辦法了,想要使用異步庫來發送,但是卻沒有可以調用await的地方.Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

解決辦法是有的,我們使用 asyncio.get_event_loop() 獲取一個事件循環對象, 我們可以在這個對象上注冊很多協程對象,這樣當執行事件循環的時候,就是去執行注冊在該事件循環上的協程, 我們通過一個小例子來看一下Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

import asyncio async def test(n): while n > 0: await asyncio.sleep(1) print("test {}".format(n)) n -= 1 return n async def test2(n): while n >0: await asyncio.sleep(1) print("test2 {}".format(n)) n -= 1def stoploop(task): print("執行結束, task n is {}".format(task.result())) loop.stop() loop = asyncio.get_event_loop() task = loop.create_task(test(5)) task2 = loop.create_task(test2(3)) task.add_done_callback(stoploop) task2 = loop.create_task(test2(3)) loop.run_forever()復制代碼

我們使用loop = asyncio.get_event_loop() 創建了一個事件循環對象loop, 并且在loop上創建了兩個task, 并且給task1添加了一個回調函數,在task1它執行結束以后,將loop停掉.Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

注意看上面的代碼,我們并沒有在某處使用await來執行協程,而是通過將協程注冊到某個事件循環對象上,然后調用該循環的run_forever() 函數,從而使該循環上的協程對象得以正常的執行.Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

上面得到的輸出為 Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

test 5 test2 3 test 4 test2 2 test 3 test2 1 test 2 test 1 執行結束, task n is 0復制代碼

可以看到,使用事件循環對象創建的task,在該循環執行run_forever() 以后就可以執行了.Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

如果不執行loop.run_forever() 函數,則注冊在它上面的協程也不會執行Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

loop = asyncio.get_event_loop() task = loop.create_task(test(5)) task.add_done_callback(stoploop) task2 = loop.create_task(test2(3)) time.sleep(5)# loop.run_forever()復制代碼

上面的代碼將loop.run_forever() 注釋掉,換成time.sleep(5) 停5秒, 這時腳本不會有任何輸出,在停了5秒以后就中止了.Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

回到之前的日志發送遠程服務器的代碼,我們可以使用aiohttp封裝一個發送數據的函數, 然后在emit中將這個函數注冊到全局的事件循環對象loop中,**后再執行loop.run_forever() .Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

loop = asyncio.get_event_loop()class CustomHandler(logging.Handler): def __init__(self, host, uri, method="POST"): logging.Handler.__init__(self) self.url = "%s/%s" % (host, uri) method = method.upper() if method not in ["GET", "POST"]: raise ValueError("method must be GET or POST") self.method = method # 使用aiohttp封裝發送數據函數 async def submit(self, data): timeout = aiohttp.ClientTimeout(total=6) if self.method == "GET": if self.url.find("?") >= 0: sep = '&' else: sep = '?' url = self.url + "%c%s" % (sep, urllib.parse.urlencode({"log": data})) async with aiohttp.ClientSession(timeout=timeout) as session: async with session.get(url) as resp: print(await resp.text()) else: headers = { "Content-type": "application/x-www-form-urlencoded", } async with aiohttp.ClientSession(timeout=timeout, headers=headers) as session: async with session.post(self.url, data={'log': data}) as resp: print(await resp.text()) return True def emit(self, record): msg = self.format(record) loop.create_task(self.submit(msg))# 添加一個httphandlerhttp_handler = CustomHandler(r"http://127.0.0.1:1987", 'api/log/get') http_handler.setLevel(logging.DEBUG) http_handler.setFormatter(fmt) logger.addHandler(http_handler) logger.debug("今天天氣不錯") logger.debug("是風和日麗的") loop.run_forever()復制代碼

這時腳本就可以正常的異步執行了.Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

loop.create_task(self.submit(msg)) 也可以使用Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

asyncio.ensure_future(self.submit(msg), loop=loop)Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

來代替,目的都是將協程對象注冊到事件循環中.Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

但這種方式有一點要注意,loop.run_forever() 將會一直阻塞,所以需要有個地方調用loop.stop()方法. 可以注冊到某個task的回調中.Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

相關免費學習推薦:python視頻教程Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

以上就是了解python 中日志異步發送到遠程服務器的詳細內容,更多請關注少兒編程網其它相關文章!Ral少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

預約試聽課

已有385人預約都是免費的,你也試試吧...

亚洲视频一区在线播放| 男人天堂av电影| 国产精品第5页| 97视频在线免费播放| 性色国产成人久久久精品| 凸凹人妻人人澡人人添| 国产成人无码av| 国产aⅴ爽av久久久久| avove在线观看| 国产中年熟女高潮大集合| 亚洲风情第一页| 中文字幕手机在线视频| 日本中文字幕在线不卡| 精品无码一区二区三区在线| 日本黄色录像视频| 五月天激情小说| 成人午夜免费福利| 中文字幕在线观看第二页| 国产精品变态另类虐交| 美女喷白浆视频| 久久国产精品网| 男女h黄动漫啪啪无遮挡软件| 久久久久久国产精品无码| 熟妇人妻av无码一区二区三区| 伊人网中文字幕| 在线观看中文字幕视频| 天堂在线精品视频| 九九热精品在线播放| 免费看国产曰批40分钟| 成年在线观看视频| 最新视频 - x88av| 99久久99久久精品免费看小说. | 国产女人爽到高潮a毛片| 六月丁香激情综合| 精品少妇久久久久久888优播| 成人三级视频在线播放| 国产极品尤物在线| 国产毛片久久久久久国产毛片| 国产在线一卡二卡| 永久免费未视频| 成人黄色短视频| 天天操天天舔天天射| 黄色正能量网站| 日韩 中文字幕| 人妻丰满熟妇aⅴ无码| xxxx黄色片| 亚洲图片综合网| 国模私拍在线观看| 久久久老熟女一区二区三区91| 欧美性猛交xx| 免费看91视频| 成人免费看片载| 漂亮人妻被黑人久久精品| 99riav国产精品视频| 亚洲熟女乱综合一区二区| 成年人性生活视频| 人妻av一区二区三区| 亚洲精品乱码久久久久久蜜桃欧美| 人妻激情偷乱视频一区二区三区| 香蕉视频免费在线看| 永久看看免费大片| 成年人小视频在线观看| 国产麻豆剧传媒精品国产av| 超碰97在线资源站| 国产精品久久免费观看| 日韩在线观看免| 男人j进女人j| www.爱色av.com| 波多结衣在线观看| 毛片aaaaa| 日本视频在线观看免费| 在线观看国产小视频| 国产手机av在线| 无码精品在线观看| 亚洲精品女人久久久| 精品成人无码一区二区三区| 黄色香蕉视频在线观看| 欧美美女黄色网| 国产免费黄色一级片| 嫩草av久久伊人妇女超级a| 中日韩av在线播放| 国产精品视频久久久久久久| 91极品身材尤物theporn| 亚洲产国偷v产偷v自拍涩爱| 日本成人在线免费观看| 国产sm调教视频| 国产又粗又爽又黄的视频| 欧美黑人经典片免费观看| 天堂av在线网站| 五月婷婷激情网| 99热这里只有精品3| 激情小说欧美色图| 亚洲一级黄色录像| 男人添女荫道口图片| 色综合色综合色综合色综合| 久久久久亚洲av成人毛片韩| 国产av无码专区亚洲av| 国产69视频在线观看| 色婷婷粉嫩av| 国产裸体舞一区二区三区| 欧美日韩精品亚洲精品| 一本大道伊人av久久综合| 污视频软件在线观看| 日韩欧美黄色网址| 成人网站免费观看入口| 欧美成人黄色网| 影音先锋国产资源| 在线看黄色的网站| 久草综合在线视频| 中国黄色片免费看| 中文字幕乱码人妻无码久久| 97免费公开视频| 伊人久久久久久久久久久久久久| 久久综合九色综合88i| 久久久久97国产| 亚洲精华国产精华精华液网站| 插吧插吧综合网| 精品无码国产一区二区三区av| 久国产精品视频| 国产精品毛片一区二区在线看舒淇 | 亚洲成人精品女人久久久| 亚洲精品成人无码| 久久精品99国产| 日本a级c片免费看三区| 欧美午夜精品一区二区| 午夜久久久久久久久久久| mm131亚洲精品| 国产黄a三级三级看三级| 中文字幕人妻一区二区三区在线视频| 国产美女主播在线| 手机看片久久久| 日本美女视频网站| 日韩日韩日韩日韩日韩| 日本午夜小视频| 国产精品99精品无码视亚| 麻豆视频传媒入口| 久久99精品波多结衣一区| 动漫av在线免费观看| 日本精品久久久久久久久久| 国产一卡二卡在线播放| 亚洲 美腿 欧美 偷拍| 国产高潮国产高潮久久久91| 99999精品| 亚洲AV无码久久精品国产一区| 91porn在线视频| 国产一级片播放| 久久久久久婷婷| 欧美 日韩 国产 高清| 天天爱天天做天天爽| www.自拍偷拍| 黄大色黄女片18第一次| 亚洲精品久久久狠狠狠爱| 超碰在线免费观看97| 日韩毛片在线播放| 美国黄色a级片| 91国产精品视频在线观看| 亚洲av无码片一区二区三区| 黄色一级片av| 中文字幕av影视| 99精品中文字幕| 国产精品成人久久| 粉嫩av懂色av蜜臀av分享| 亚洲 中文字幕 日韩 无码| 国产白浆在线观看| 久久香蕉视频网站| 中文字幕在线播放av| 日本午夜在线观看| 中文字幕一区在线播放| 免费网站在线高清观看| 久久久久无码国产精品| www.超碰97| 污污视频在线免费| 大黑人交xxx极品hd| 制服丝袜中文字幕第一页| 26uuu国产| 五月天av在线播放| av漫画在线观看| 中文字幕色网站| 少妇一级淫免费观看| 超碰在线资源站| 美女又爽又黄免费| 亚洲女人在线观看| 色哟哟精品观看| 国语对白一区二区| 婷婷丁香综合网| 手机看片久久久| 91嫩草丨国产丨精品| jizz国产在线| 日本福利视频一区| 熟妇人妻av无码一区二区三区| 国产a级片免费观看| 午夜性色福利影院| 依人在线免费视频| 大地资源二中文在线影视观看 | 无码成人精品区在线观看| www.日本一区| 精品欧美一区二区久久久| 日本少妇性高潮| 极品久久久久久| 国产乱码久久久久| 18岁视频在线观看| 午夜剧场免费看| 亚洲精品www久久久久久| 日韩精品一区二区三区在线视频| 中文字幕人成人乱码亚洲电影| 亚洲国产一二三精品无码 | 国产a级片网站| 日本免费一区视频| av中文字幕网址| 天天操天天摸天天舔| 亚洲精品久久久久久久蜜桃| 久激情内射婷内射蜜桃| 超碰人人cao| 日韩伦人妻无码| 亚洲国产精品女人| 狠狠人妻久久久久久综合麻豆| 天天干在线影院| 大胸美女被爆操| 国产老女人乱淫免费| 黄色手机在线视频| 国产午夜精品久久久久久久久| 91麻豆国产在线| 日韩精品你懂的| 三级黄色在线观看| 天天av天天翘| 国产特黄大片aaaa毛片| 国产欧美精品aaaaaa片| 欧美日韩人妻精品一区在线| 欧美国产成人精品一区二区三区| 久久久久99精品成人片| 中文字幕无码人妻少妇免费| 精品国产xxx| 午夜精品久久久内射近拍高清| 国产高清自拍视频| 中文字幕一区二区三区免费看| 三级a在线观看| 午夜69成人做爰视频| 图片区 小说区 区 亚洲五月| 激情五月色婷婷| 国产精品国产亚洲精品看不卡| 中文字幕在线观看网址| 999久久久久| 久久黄色免费视频| 缅甸午夜性猛交xxxx| 久久美女免费视频| 亚洲奶汁xxxx哺乳期| 黄色片免费观看视频| 国产精品丝袜久久久久久消防器材| 国产一二三四五区| 丰满人妻一区二区三区免费| 中日韩精品视频在线观看| 免费裸体美女网站| 国产精品99久久久久久大便| 欧美xxxx日本和非洲| 国产成人精品亚洲| 午夜福利123| 国产特级黄色大片| 亚洲 欧美 变态 另类 综合| www.黄色网| 国产女18毛片多18精品| 毛片在线免费视频| 亚洲精品视频导航| 欧美一级免费播放| 精品国产欧美日韩不卡在线观看| 日本国产在线视频| 亚洲国产一二三区| 最近中文字幕av| 国产污视频在线观看| 在线免费视频一区| 欧美三级一级片| 奇米777四色影视在线看| 快灬快灬一下爽蜜桃在线观看| 亚洲啪av永久无码精品放毛片| www.狠狠干| 在线免费一区二区| 97久久久久久久| 九九热国产精品视频| 九热视频在线观看| 奇米精品一区二区三区| 日韩中文在线字幕| www日韩在线| 少妇愉情理伦三级| 国产精品成人一区二区三区电影毛片| 亚洲欧美日本在线观看| www.污视频| 国产一区二区麻豆| 欧美视频xxxx| 四虎影院在线免费播放| 中文字幕激情小说| 日本熟女一区二区| 久久久久久久久久久网| 最新免费av网址| 亚洲美女爱爱视频| 午夜免费看视频| 亚欧美在线观看| 9久久婷婷国产综合精品性色| 草草久久久无码国产专区| 免费超爽大片黄| 男人插女人视频在线观看| 大胆欧美熟妇xx| 大胆欧美熟妇xx| 久久久久久www| 尤物av无码色av无码| 男人日女人视频网站| 2018国产在线| 免费无遮挡无码永久视频| 亚洲美免无码中文字幕在线| 欧美久久久久久久久久久久久久| 日韩欧美猛交xxxxx无码| 特级西西人体www高清大胆| 浴室偷拍美女洗澡456在线| 在线视频一二三区| 激情五月婷婷六月| 欧美成人免费在线观看视频| 日韩小视频在线播放| 欧美成人免费高清视频| 欧洲熟妇精品视频| 亚洲免费av一区| 九九九免费视频| 丁香六月婷婷综合| 欧美性猛交xxxx乱大交hd| 中文字幕人妻一区二区三区视频| 夜夜嗨av禁果av粉嫩avhd| 精品国产黄色片| 美女被爆操网站| aaaaa级少妇高潮大片免费看| 白白色免费视频| 中文字幕av播放| 大伊香蕉精品视频在线| 国产精品免费观看久久| jizz欧美性11| 日韩三级一区二区三区| 波多野结衣视频在线看| 国产999久久久| 美国黄色一级视频| 免费福利视频网站| 黄色一级视频播放| 农村妇女精品一二区| 国产女同无遮挡互慰高潮91| 日韩欧美成人一区二区三区 | 亚洲第一天堂影院| 最新版天堂资源在线| 成熟人妻av无码专区| 国产高清免费在线| 亚洲精品中文字幕无码蜜桃| 毛毛毛毛毛毛毛片123| 区一区二在线观看| www日本高清视频| 一二三不卡视频| 午夜啪啪福利视频| 天堂社区在线视频| 日本网站在线播放| 国产毛片在线视频| 久久久久久久人妻无码中文字幕爆| 妖精视频在线观看免费| 国产精品视频二| 超碰在线资源站| ,亚洲人成毛片在线播放| 一级黄色大片免费看| 小泽玛利亚一区二区免费| 久久无码高潮喷水| 日韩激情在线播放| 国产激情久久久久久熟女老人av| 国产一级二级在线观看| 大桥未久一区二区三区| 看看黄色一级片| 一级片在线观看视频| 尤物网站在线观看| 乱熟女高潮一区二区在线| 亚洲日本黄色片| 一区二区 亚洲| 中文人妻一区二区三区| 青青青青草视频| 久久久久久久黄色片| 91视频免费入口| 第九区2中文字幕| 青娱乐国产盛宴| 内射无码专区久久亚洲| 久久嫩草捆绑紧缚| 亚洲一级片免费| 国产免费一区二区三区最新不卡 | 69sex久久精品国产麻豆| 青娱乐国产在线| 日韩在线视频第一页| 波多野结衣三级在线| 亚洲小视频网站| 亚洲精品字幕在线观看| 成人三级视频在线观看| 国产免费999| 91国产免费视频| 国产欧美一区二区三区在线观看视频 | 亚洲区一区二区三| 最新国产黄色网址| 亚洲国产精彩视频| 五月天丁香激情| 国产一级片网址| 国产91久久久| 99re8这里只有精品| 欧美成人aaaaⅴ片在线看| 亚洲色图欧美另类|