久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

詳解python logging日志傳輸

瀏覽:122日期:2022-07-19 09:25:37

1.生成日志并通過http傳輸出去(通過HTTPHandler方式):

#生成并發送日志import loggingfrom logging.handlers import HTTPHandlerimport logging.configdef save(): logger = logging.getLogger(__name__) # 生成一個log實例,如果括號為空則返回root logger hh = HTTPHandler(host=’127.0.0.1:5000’, url=’/log’, method=’POST’) #用HTTPHandler直接發送日志,而并不是寫文件再傳文件。 logger.setLevel(logging.INFO) #設置日志最低輸出級別為info logger.addHandler(hh) #添加Handler對象給記錄器(為logger添加的日志處理器,可以自定義日志處理器讓其輸出到其他地方) logger.info(’存入600元’) # 輸出日志,內容為‘存入600元’save()

2.用flask接收傳過來的日志:

#flask接收日志from flask import Flask,requestapp = Flask(__name__)@app.route(’/log’,methods=[’POST’])def say_hello(): #查看傳過來的數據格式: print(request.mimetype) #HTTPHandler傳過來的是個form表單 print(request.form.to_dict()) return ’<h1>Hello, Flask!</h1>’if __name__ == ’__main__’: app.run()輸出:#這是傳過來的數據格式,是個form表單application/x-www-form-urlencoded #這是form.to_dict解析出來的內容(直接解析成了字典){’name’: ’__main__’, ’msg’: ’存入600元’, ’args’: ’()’, ’levelname’: ’INFO’, ’levelno’: ’20’, ’pathname’: ’C:/Users/huawei/Desktop/code/log/send_log.py’, ’filename’: ’send_log.py’, ’module’: ’send_log’, ’exc_info’: ’None’, ’exc_text’: ’None’, ’stack_info’: ’None’, ’lineno’: ’15’, ’funcName’: ’save’, ’created’: ’1593581146.172768’, ’msecs’: ’172.76811599731445’, ’relativeCreated’: ’176.5270233154297’, ’thread’: ’13904’, ’threadName’: ’MainThread’, ’processName’: ’MainProcess’, ’process’: ’3656’}

3.logging模塊介紹

Python的logging模塊提供了通用的日志系統,熟練使用logging模塊可以方便開發者開發第三方模塊或者是自己的Python應用。同樣這個模塊提供不同的日志級別,并可以采用不同的方式記錄日志,比如文件,HTTP、GET/POST,SMTP,Socket等,甚至可以自己實現具體的日志記錄方式。下文我將主要介紹如何使用文件方式記錄log。

1.基本概念:

logging模塊包括logger,handler,filter,formatter這四個基本概念。

logging模塊與log4j的機制是一樣的,只是具體的實現細節不同。模塊提供logger,handler,filter,formatter。

logger:提供日志接口,供應用代碼使用。logger最長用的操作有兩類:配置和發送日志消息。可以通過logging.getLogger(name)獲取logger對象,如果不指定name則返回root對象,多次使用相同的name調用getLogger方法返回同一個logger對象。 handler:將日志記錄(log record)發送到合適的目的地(destination),比如文件,socket等。一個logger對象可以通過addHandler方法添加0到多個handler,每個handler又可以定義不同日志級別,以實現日志分級過濾顯示。 filter:提供一種優雅的方式決定一個日志記錄是否發送到handler。 formatter:指定日志記錄輸出的具體格式。formatter的構造方法需要兩個參數:消息的格式字符串和日期字符串,這兩個參數都是可選的。

與log4j類似,logger,handler和日志消息的調用可以有具體的日志級別(Level),只有在日志消息的級別大于logger和handler的級別。

import logginglogging.basicConfig(level=logging.DEBUG, format=’%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s’, datefmt=’%a, %d %b %Y %H:%M:%S’, filename=’myapp.log’, filemode=’w’)##################################################################################################定義一個StreamHandler,將INFO級別或更高的日志信息打印到標準錯誤,并將其添加到當前的日志處理對象#console = logging.StreamHandler()console.setLevel(logging.INFO)formatter = logging.Formatter(’%(name)-12s: %(levelname)-8s %(message)s’)console.setFormatter(formatter)logging.getLogger(’’).addHandler(console)#################################################################################################logging.debug(’This is debug message’)logging.info(’This is info message’)logging.warning(’This is warning message’) 屏幕上打印:root : INFO This is info messageroot : WARNING This is warning message./myapp.log文件中內容為:Sun, 24 May 2009 21:48:54 demo2.py[line:11] DEBUG This is debug messageSun, 24 May 2009 21:48:54 demo2.py[line:12] INFO This is info messageSun, 24 May 2009 21:48:54 demo2.py[line:13] WARNING This is warning message

2.主要用法:

logging.StreamHandler: 日志輸出到流,可以是sys.stderr、sys.stdout或者文件

logging.FileHandler: 日志輸出到文件

日志回滾方式,實際使用時用RotatingFileHandler和TimedRotatingFileHandler

logging.handlers.BaseRotatingHandler

logging.handlers.RotatingFileHandler

logging.handlers.TimedRotatingFileHandler

logging.handlers.SocketHandler: 遠程輸出日志到TCP/IP sockets

logging.handlers.DatagramHandler: 遠程輸出日志到UDP sockets

logging.handlers.SMTPHandler: 遠程輸出日志到郵件地址

logging.handlers.SysLogHandler: 日志輸出到syslog

logging.handlers.NTEventLogHandler: 遠程輸出日志到Windows NT/2000/XP的事件日志

logging.handlers.MemoryHandler: 日志輸出到內存中的制定buffer

logging.handlers.HTTPHandler: 通過'GET'或'POST'遠程輸出到HTTP服務器

舉例:

import loggingimport sys# 獲取logger實例,如果參數為空則返回root loggerlogger = logging.getLogger('AppName')# 指定logger輸出格式formatter = logging.Formatter(’%(asctime)s %(levelname)-8s: %(message)s’)# 文件日志file_handler = logging.FileHandler('test.log')file_handler.setFormatter(formatter) # 可以通過setFormatter指定輸出格式# 控制臺日志console_handler = logging.StreamHandler(sys.stdout)console_handler.formatter = formatter # 也可以直接給formatter賦值# 為logger添加的日志處理器,可以自定義日志處理器讓其輸出到其他地方logger.addHandler(file_handler)logger.addHandler(console_handler)# 指定日志的最低輸出級別,默認為WARN級別logger.setLevel(logging.INFO)# 輸出不同級別的loglogger.debug(’this is debug info’)logger.info(’this is information’)logger.warn(’this is warning message’)logger.error(’this is error message’)logger.fatal(’this is fatal message, it is same as logger.critical’)logger.critical(’this is critical message’)# 2016-10-08 21:59:19,493 INFO : this is information# 2016-10-08 21:59:19,493 WARNING : this is warning message# 2016-10-08 21:59:19,493 ERROR : this is error message# 2016-10-08 21:59:19,493 CRITICAL: this is fatal message, it is same as logger.critical# 2016-10-08 21:59:19,493 CRITICAL: this is critical message# 移除一些日志處理器logger.removeHandler(file_handler)

4.概述:

python的logging模塊(logging是線程安全的)給應用程序提供了標準的日志信息輸出接口。logging不僅支持把日志輸出到文件,還支持把日志輸出到TCP/UDP服務器,EMAIL服務器,HTTP服務器,UNIX的syslog系統等。在logging中主要有四個概念:logger、handler、filter和formatter,下面會分別介紹。

1.logger

Logger對象扮演了三重角色:

它給應用程序暴漏了幾個方法,以便應用程序能在運行時記錄日志。

Logger對象根據日志的級別或根據Filter對象,來決定記錄哪些日志。

Logger對象負責把日志信息傳遞給相關的handler。

在Logger對象中,最常使用的方法分為兩類:configuration,message sending。 configuration方法包括:

setLevel(level)

setLevel(level)方法用來設置logger的日志級別,如果日志的級別低于setLevel(level)方法設置的值,那么logger不會處理它。

logging模塊內建的日志級別有:

CRITICAL = 50FATAL = CRITICALERROR = 40WARNING = 30WARN = WARNINGINFO = 20DEBUG = 10NOTSET = 0 (數值越大級別越高)addFilter(filter)removeFilter(filter)addHandler(handler)removeHandler(handler)

message sending方法包括:

debug(log_message, [*args[, **kwargs]])

使用DEBUG級別,記錄log_message % args。

為了記錄異常信息,需要將關鍵字參數exc_info設置為一個true值。

logger.debug('Houston, we have a %s', 'thorny problem', exc_info=1)info(log_message, [*args[, **kwargs]])

使用INFO級別,記錄log_message % args。

為了記錄異常信息,需要將關鍵字參數exc_info設置為一個true值。

logger.info('Houston, we have a %s', 'interesting problem', exc_info=1)warning(log_message, [*args[, **kwargs]])

使用WARNING級別,記錄log_message % args。

為了記錄異常信息,需要將關鍵字參數exc_info設置為一個true值。

logger.warning('Houston, we have a %s', 'bit of a problem', exc_info=1)error(log_message, [*args[, **kwargs]])

使用Error級別,記錄log_message % args。

為了記錄異常信息,需要將關鍵字參數exc_info設置為一個true值。

logger.error('Houston, we have a %s', 'major problem', exc_info=1)critical(log_message, [*args[, **kwargs]])

使用CRITICAL級別,記錄log_message % args。

為了記錄異常信息,需要將關鍵字參數exc_info設置為一個true值。

logger.critical('Houston, we have a %s', 'major disaster', exc_info=1)exception(message[, *args]) self.error(*((msg,) + args), **{’exc_info’: 1})log(log_level, log_message, [*args[, **kwargs]])

使用整型的級別level,記錄log_message % args。

為了記錄異常信息,需要將關鍵字參數exc_info設置為一個true值。

logger.log(level, 'We have a %s', 'mysterious problem', exc_info=1)logging.getLogger([name])

方法返回一個Logger實例的引用,如果提供了name參數,那么它就是這個Logger實例的名稱,如果沒提供name參數,那么這個Logger實例的名稱是root。

可以通過Logger實例的name屬性,來查看Logger實例的名稱。

Logger實例的名稱是使用句號(.)分隔的多級結構。

在這種命名方式中,后面的logger是前面的logger的子(父子logger只是簡單的通過命名來識別),比如:有一個名稱為foo的logger,那么諸如foo.bar、foo.bar.baz和foo.bam這樣的logger都是foo這個logger的子logger。

子logger會自動繼承父logger的定義和配置。

使用相同的名稱多次調用logging.getLogger([name])方法,會返回同一個logger對象的引用。

這個規則不僅僅在同一個module有效,而且對在同一個Python解釋器進程的多個module也有效。

因此應用程序可以在一個module中定義一個父logger,然后在其他module中繼承這個logger,而不必把所有的logger都配置一遍

2.handler

handler實例負責把日志事件分發到具體的目的地。logger對象可以使用addHandler()方法,添加零個或多個handler對象到它自身。一個常見的場景是:應用程序可能希望把所有的日志都記錄到一個log文件,所有的ERROR及以上級別的日志都記錄到stdout,所有的CRITICAL級別的日志都發送到一個email地址。這個場景需要三個獨立的handler,每個handler負責把特定級別的日志發送到特定的地方。

下面是logging模塊內置的handler:StreamHandlerFileHandlerRotatingFileHandlerTimedRotatingFileHandlerSocketHandlerDatagramHandlerSysLogHandlerNTEventLogHandlerSMTPHandlerMemoryHandlerHTTPHandler

內置的handler提供了下面的配置方法:

setLevel(level) handler對象的setLevel()方法,與logger對象的setLevel()方法一樣,也是用于設置一個日志級別,如果日志的級別低于setLevel()方法設置的值,那么handler不會處理它。 setFormatter(formatter) addFilter(filter) removeFilter(filter)

應用程序代碼不應該直接實例化和使用handler。logging.Handler是一個定義了所有的handler都應該實現的接口和建立了子類能夠使用(或重寫)的一些默認行為的基類。

自定義Handler 自定義的handler必須繼承自logging.Handler,且實現下面的方法:

class Handler(Filterer): def emit(self, record): ''' Do whatever it takes to actually log the specified logging record. This version is intended to be implemented by subclasses and so raises a NotImplementedError. ''' raise NotImplementedError, ’emit must be implemented ’ ’by Handler subclasses’ def flush(self): ''' Ensure all logging output has been flushed. This version does nothing and is intended to be implemented by subclasses. ''' pass def close(self): ''' Tidy up any resources used by the handler. This version does removes the handler from an internal list of handlers which is closed when shutdown() is called. Subclasses should ensure that this gets called from overridden close() methods. ''' #get the module data lock, as we’re updating a shared structure. _acquireLock() try: #unlikely to raise an exception, but you never know... if self in _handlers: del _handlers[self] if self in _handlerList: _handlerList.remove(self) finally: _releaseLock()

其中,emit(record)方法負責執行真正地記錄日志所需的一切事情,在logging.Handler的子類中必須實現這個方法。close()方法負責清理handler所使用的資源(在Python解釋器退出的時候,會調用所有的handler的flush()和close()方法),logging.Handler的子類應該確保在重寫close()方法的時候,調用父類的該方法。

下面分析logging.StreamHandler的源代碼:

class StreamHandler(Handler): def __init__(self, strm=None): Handler.__init__(self) if strm is None: strm = sys.stderr self.stream = strm def flush(self): if self.stream and hasattr(self.stream, 'flush'): self.stream.flush() def emit(self, record): try: msg = self.format(record) stream = self.stream fs = '%sn' if not hasattr(types, 'UnicodeType'): #if no unicode support... stream.write(fs % msg) else: try: if (isinstance(msg, unicode) and getattr(stream, ’encoding’, None)): fs = fs.decode(stream.encoding) try: stream.write(fs % msg) except UnicodeEncodeError: #Printing to terminals sometimes fails. For example, #with an encoding of ’cp1251’, the above write will #work if written to a stream opened or wrapped by #the codecs module, but fail when writing to a #terminal even when the codepage is set to cp1251. #An extra encoding step seems to be needed. stream.write((fs % msg).encode(stream.encoding)) else: stream.write(fs % msg) except UnicodeError: stream.write(fs % msg.encode('UTF-8')) self.flush() except (KeyboardInterrupt, SystemExit): raise except: self.handleError(record)

在構造函數中,如果提供了strm參數,那么它就是要輸出到的流,如果沒提供,那么就會將日志輸出到標準錯誤輸出流sys.stderr。

flush()方法的作用是:刷新self.stream內部的I/O緩沖區。每次emit日志之后都會調用這個方法,將日志從I/O緩沖區sync到self.stream。 emit(record)方法的作用是:將LogRecord對象(record)記錄到self.stream。emit(record)方法首先調用基類logging.Handler提供的format(record)方法,該方法會根據設置的Formatter對象來格式化record對象,得到要記錄的字符串msg。然后對fs(fs其實就是在msg的尾部增加一個換行’n’)進行一系列的編碼解碼,將它寫入到self.stream。最后再刷新self.stream。在emit(record)調用期間發生的異常,應該調用logging.Handler提供的handleError(record)方法來處理。

3.filter

Filter對象用于對LogRecord對象執行過濾,logger和handler都可以使用filter來過濾record。下面用一個列子來說明Filter基類的作用:

如果使用A.B實例化一個filter,那么它允許名稱為A.B,A.B.C,A.B.C.D這樣的logger記錄的日志通過,不允許名稱為A.BB,B.A.B這樣的logger記錄的日志通過。

如果使用空字符串實例化一個filter,那么它允許所有的事件通過。

Filter基類有一個方法叫filter(record),它用來決定指定的record(LogRecord對象)是否被記錄。如果該方法返回0,則不記錄record;返回非0則記錄record。

Filterer(注意:不是Filter)是logger和handler的基類。它提供了方法來添加和刪除filter,并且提供了filter(record)方法用于過濾record,該方法默認允許record被記錄,但是任何filter都可以否決這個默認行為,如果想要丟棄record,filter(record)方法應該返回0,否則應該返回非0。

4.formatter

Formatter對象用于把一個LogRecord對象轉換成文本,它定義了日志的格式、結構。與logging.Handler類不同,應用程序可以直接實例化Formatter類,如果需要也可以子類化Formatter,以便定

制一些行為。

Formatter的構造函數接受兩個參數:第一個參數是用于日志信息的格式化字符串;第二個參數是用于日期的格式化字符串。第二個參數可選的,默認值是%Y-%m-%d %H:%M:%S。

日志信息的格式化字符串用%(<dictionary key>)s風格的字符串做替換。

下面是替換字符串和它們所代表的含義:

%(name)slogger的名稱%(levelno)s日志級別的數字表現形式%(levelname)s日志級別的文本表現形式%(pathname)s調用logging的源文件的全路徑名%(filename)spathname的文件名部分%(module)s模塊名(filename的名稱部分)%(lineno)d調用logging的行號%(funcName)s函數名%(created)fLogRecord的創建時間(time.time()的返回值)%(asctime)sLogRecord的創建時間的文本表現形式%(msecs)d創建時間的毫秒部分%(relativeCreated)d LogRecord的創建時間,單位是毫秒。這個時間是相對logging模塊被加載的時間的(通常就是應用程序啟動的時間)。%(thread)d線程ID%(threadName)s線程名稱%(process)d進程ID%(message)srecord.getMessage()的返回結果。

舉例:

配置logging

下面是一個簡單的例子,它會向標準輸出打印日志:

import logging import sys logger = logging.getLogger(__name__) filter = logging.Filter(__name__) formatter = logging.Formatter('%(asctime)s|%(name)-12s|%(message)s', '%F %T')stream_handler = logging.StreamHandler(sys.stdout) stream_handler.addFilter(filter) stream_handler.setLevel(logging.DEBUG) stream_handler.setFormatter(formatter)logger.setLevel(logging.DEBUG) logger.addFilter(filter) logger.addHandler(stream_handler)if __name__ == '__main__': logger.info('info')運行這個腳本,輸出結果是:2015-12-16 13:52:17|__main__ |info

使用配置文件,配置logging

下面是一個使用配置文件,配置logging的例子:

import logging import logging.configlogging.config.fileConfig('logging.conf')if __name__ == '__main__': logger = logging.getLogger('test_logging.sublogger') logger.info('info')

logging.conf如下:

[loggers]keys = root,logger[handlers]keys = stream_handler[formatters]keys = formatter[logger_root]handlers = stream_handler[logger_logger]handlers = stream_handler level = DEBUG propagate = 1 qualname = test_logging[handler_stream_handler]class = StreamHandler args = (sys.stdout,) formatter = formatter level = DEBUG[formatter_formatter]format = %(asctime)s|%(name)-12s|%(message)s datefmt = %F %T

需要解釋的地方有兩處:第一個是logger_xxxsection中的propagate選項,在logger對象把record傳遞給所有相關的handler的時候,會(逐級向上)尋找這個logger和它所有的父logger的全部handler。在尋找過程中,如果logger對象的propagate屬性被設置為1,那么就繼續向上尋找;如果某個logger的propagate屬性被設置為0,那么就會停止搜尋。

第二個是logger_xxxsection中的qualname選項,它其實就是logger的名稱。

使用配置文件的時候,必須定義root logger。

最酷的listen(port)函數

logging.config.listen(port)函數可以讓應用程序在一個socket上監聽新的配置信息,達到在運行時改變配置,而不用重啟應用程序的目的。

監聽程序:

import logging.config import logging import timelogging.config.fileConfig('logging.conf') logger = logging.getLogger('test_logging.listen')t = logging.config.listen(9999) t.setDaemon(True) t.start()try: while True: logger.info(’running.’) time.sleep(3)except (KeyboardInterrupt, SystemExit, Exception): logging.config.stopListening()

發送新的配置信息程序:

import socket import structHOST = ’localhost’ PORT = 9999 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) print 'connected...' data_to_send = open('logging.conf').read() s.send(struct.pack('>L', len(data_to_send))) s.send(data_to_send) print 'closing...' s.close()

以上就是詳解python logging日志傳輸的詳細內容,更多關于python logging日志傳輸的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 日本久久久久久久久久久久 | 91久久久久久久久 | 日本精品视频在线观看 | 国产黄色影视 | 欧美一区第一页 | 亚洲精品www久久久久久广东 | 国产亚洲精品久久久闺蜜 | 国产视频久久久久久 | 国产在线看片 | 校园春色av| 99精品在线 | 韩国三级午夜理伦三级三 | 99re在线观看 | 亚洲精品一区二区三区不 | 亚洲一区不卡在线 | 在线视频一二区 | 毛片黄色 | 亚洲一区二区三区四区在线 | 欧洲精品在线观看 | 国产高清精品一区 | 亚洲精品电影在线一区 | 亚洲国产精品久久久久久女王 | 亚洲h视频 | 亚洲va欧美va天堂v国产综合 | 中文字幕一区在线 | 亚洲永久免费 | 久久久久中文 | 国产成人av电影 | 91免费观看 | 久久久久久91亚洲精品中文字幕 | 国产精品久久久爽爽爽麻豆色哟哟 | 国产亚洲精品美女久久久久久久久久 | 欧洲亚洲视频 | 精品二区视频 | 久久久久久国产精品 | 青青久久 | 亚洲这里只有精品 | 久久草在线视频 | 国产a区 | 亚洲成人av电影 | 午夜免费小视频 | 日本一区二区高清不卡 | 国产精品一区在线 | 国产精品精品视频一区二区三区 | 99视频在线免费观看 | 色毛片 | 国产视频久久 | 黄色综合网 | 国产精品中文字幕在线观看 | 国产日韩欧美精品一区二区 | 日韩91| 91干在线观看 | 日韩视频在线免费观看 | 精品国产欧美 | 国产偷录视频叫床高潮对白 | 99精品全国免费观看视频软件 | 欧美视频三区 | 午夜寂寞少妇aaa片毛片 | 精品一区二区三区免费 | 33eee在线视频免费观看 | 亚洲成人免费 | 亚洲精品三级 | 天天干天天操天天爽 | 欧美 日韩 亚洲 一区 | 91亚洲国产 | 国产福利片在线 | 国产精品一区电影 | 九九只有精品 | 精品欧美日韩 | 午夜成人免费电影 | 国内精品国产三级国产在线专 | 中文字幕成人av | 日韩av在线中文字幕 | 国产精品视频免费 | 日韩精品一区在线 | 国产一区二区久久 | 欧美一区国产一区 | 国产精品一区二区无线 | 伊人久久视频 | 亚洲第一av | 精品国产乱码久久久久久闺蜜 | 操久在线| 日韩欧美视频一区 | 色婷婷av久久久久久久 | 亚洲综合一区二区 | 久久国产精品视频 | 亚州成人 | 中文字幕一区日韩精品欧美 | 97视频观看 | 午夜视| 亚洲一区二区免费在线观看 | 一区二区视频 | 成年人黄色一级毛片 | www.成人 | 日本日韩中文字幕 | 欧美激情一区二区三区 | 91操碰 | 欧美三级电影在线播放 | 欧美国产精品一区二区 | 国产情侣小视频 | 日韩另类 | 天天色影视综合 | 久草视频首页 | 色5月婷婷丁香六月 | 免费成人在线观看视频 | 国产中文字幕亚洲 | 午夜免费影院 | 神马久久久久久久久久 | 色综合一区二区三区 | 久久精品久久精品 | gogo熟少妇大胆尺寸 | 亚洲欧美在线免费 | 日韩色视频| 国产精品久久免费视频在线 | 另类 综合 日韩 欧美 亚洲 | 欧美精品久久久久久久久老牛影院 | 日韩三级中文字幕 | 一级黄色大片视频 | 99精品免费观看 | 欧洲一区二区三区 | 91丨九色丨国产在线 | 精品少妇一区二区三区日产乱码 | 国产免费成人 | 日韩欧美综合 | 午夜激情在线观看 | 久久久久久国产免费视网址 | 狠狠搞狠狠干 | 精品一区二区三区免费看 | 亚洲欧美一区二区在线观看 | 欧美福利视频 | 亚洲天堂久久 | 日本在线小视频 | 亚州激情| 欧美日韩国产在线观看 | 色综合天天综合网国产成人网 | av入口| 日韩欧美在线观看视频 | 欧美精产国品一二三区 | 中文字幕av一区二区三区免费看 | 天天干,夜夜操 | 亚洲一区二区三区免费观看 | 国产精品乱码一区二区三区 | 日本一区不卡 | 日韩欧美综合 | 色优久久 | 一二三四在线视频观看社区 | 午夜精品福利一区二区三区蜜桃 | 亚洲一区二区三区观看 | 精品国产高清一区二区三区 | 日韩av一区二区在线观看 | 日韩精品亚洲专区在线观看 | 成人在线| 久久久久久久久久一区二区 | 99热影院 | 国产日韩欧美一区 | 日韩精品视频免费在线观看 | 欧美国产在线一区 | 久久青青 | 国产精品成人国产乱一区 | 欧美在线高清 | 欧美精品一区二区在线观看 | 中文字幕在线第一页 | 久热热热 | 亚洲人成人一区二区在线观看 | 欧美成人手机在线 | 色婷婷久久 | 一a级毛片 | 日韩成人国产 | 精品久久一二三区 | 国产精品久久久久久久久免费桃花 | 久久一二区| 大黄网站在线观看 | 欧美寡妇偷汉性猛交 | 亚洲国产一区二区三区在线观看 | 四虎新网站 | 丁香五月亚洲综合在线 | 国产精品成人一区二区三区夜夜夜 | 精品免费视频 | 青青久久| 91精品综合久久久久久五月天 | 久久久久久久久久久久网站 | 国产高清一级片 | 成人一级 | 国产不卡视频在线观看 | 国产成人av在线 | 欧美日韩不卡合集视频 | 小草av| 亚洲视频综合 | 亚洲精品一区二区三区蜜桃久 | 色综合久久久久久久久久久 | 操操操av | 久久久久综合 | 在线观看中文字幕 | 亚洲www啪成人一区二区 | www.精品 | 国产乱码精品一区二区三区忘忧草 | 四虎影院免费网址 | m豆传媒在线链接观看 | 久久99精品久久久久久琪琪 | 久久久久无码国产精品一区 | 自拍视频在线观看 | 精品国产乱码久久久久久久软件 | 免费久久99精品国产婷婷六月 | 欧美久久a | 婷五月综合 | 精品久久久成人 | 久久久性色精品国产免费观看 | 日韩精品网站在线观看 | 精品在线一区二区 | 中文日韩在线 | 爱干视频| 久久精品在线观看视频 | 91久久 | 亚洲青涩在线 | 毛片久久 | 欧美视频一区 | 福利网站在线观看 | 欧美日韩国产在线播放 | 亚洲精品久久一区二区三区 | 精品99久久| 国产欧美一区二区 | www.中文字幕 | 青青久视频 | 国产精品久久久久久亚洲调教 | 久久久久久91香蕉国产 | 久久精品91久久久久久再现 | 青草视频在线免费观看 | 日韩电影三级 | 91免费视频 | 性一交一乱一透一a级 | 日本在线看 | 欧美 日韩 国产 一区 | 亚洲免费视频大全 | 亚洲精品久久久久久下一站 | 五月婷婷导航 | 欧美日韩一二三 | 中文字幕日韩在线 | 日本成年人免费网站 | 欧美一区二区三区 | 1000部精品久久久久久久久 | 久久综合亚洲 | 2018国产大陆天天弄 | 亚洲成人av在线 | 成人精品免费视频 | 色资源在线 | 日韩激情综合网 | 凹凸日日摸日日碰夜夜爽孕妇 | jizz久久久| 国产伦一区 | 久草新免费| 第一福利丝瓜av导航 | 国产精品久久久久久久久久10秀 | 91视频日韩| 成人欧美一区二区三区黑人孕妇 | 欧美精品被 | 国产最新精品 | 国产最好的av国产大片 | 中文字幕亚洲欧美日韩在线不卡 | 欧美大片一区二区 | 老司机在线精品视频 | 午夜影院a | 在线第一页 | 色吊丝2288sds中文字幕 | 国产日韩欧美精品 | 综合色久| 久久三区 | 亚洲精品久久久一区二区三区 | 午夜视频福利在线观看 | 6080夜射猫| 龙珠z国语版291集全 | 久一区二区三区 | 国产电影一区二区 | 久草天堂 | 精品福利在线视频 | 日本久久精品 | 午夜视频在线观看网站 | 国产一区免费视频 | 99久久久99久久国产片鸭王 | 日韩小视频在线播放 | 国产精品视频一区二区三区 | 亚洲午夜精品片久久www慈禧 | 欧洲一区在线 | 99久久精品免费看国产免费软件 | 午夜视频网站 | 国产一区二区精品在线观看 | 久久亚洲国产精品 | 日韩免费视频 | 一区二区三区小视频 | 日本一二三区视频 | 精品久久一区 | 日产精品久久久一区二区 | 亚洲人成网站999久久久综合 | 国产欧美精品一区二区三区 | 中文字幕国产 | 在线视频一二区 | 一区二区在线看 | 国产精品夜夜 | 一区视频在线 | 国产野精品久久久久久久不卡 | 国产亚洲精品成人av久久ww | 视频在线一区 | 狠狠搞狠狠搞 | 国产精品女人视频 | 一区二区三区国产好 | 国产中文 | 中文字幕在线免费看 | 国产成人99久久亚洲综合精品 | 国产一区二区免费电影 | 亚洲狠狠爱 | 免费一区 | 一区二区三区中文字幕 | 成人观看免费视频 | 久久精品综合 | 欧美日本一区二区三区 | 日韩精品一区二区三区老鸭窝 | 久久精品国产91精品亚洲高清 | 夜夜夜操操操 | 欧美成人在线免费观看 | 日韩激情视频一区二区 | 欧美一a一片一级一片 | 夜夜骚| 国产成人在线播放 | 另类亚洲专区 | 91精品久久久久久久99 | 久久精品一区二区三区四区 | a级在线观看免费 | 午夜免费视频 | 亚洲网站在线播放 | 91一区二区三区久久国产乱 | 国产午夜精品久久久久久久 | www国产xxx| a国产视频 | 日韩在线中文字幕 | 日韩欧美自拍 | 在线观看www | 欧美日韩不卡合集视频 | 操操操夜夜操 | 久久伊人国产 | 欧美视频二区 | 欧美成人午夜视频 | 97国产精品视频 | 男女精品 | 一级黄片毛片 | 久久精品视频免费看 | 国产免费av在线 | 男女av在线 | 成人精品久久 | 国产精品极品美女在线观看免费 | 自拍亚洲| 五月天婷婷色综合 | 青青久在线视频 | 亚洲a网 | 欧美一级在线 | av入口| 日韩高清中文字幕 | 欧美日韩视频第一页 | 久久极品 | 国产亚洲视频在线观看 | 亚洲怡红院在线观看 | 视频在线一区 | 一区二区国产精品 | 99久久婷婷国产综合精品电影 | 91亚洲国产精品 | 免费一级欧美在线观看视频 | 久久久久久亚洲国产 | 亚洲美女视频一区二区三区 | 一级片在线观看 | 狠狠综合 | 天天草天天 | 91.成人天堂一区 | 国产激情在线看 | 精品一区久久 | 国产精品永久在线观看 | 国产精品久久久久久久午夜片 | 极品久久 | 久久天堂av综合合色蜜桃网 | 欧州一区二区三区 | 色婷婷导航| 99热影院 | 日韩一区二区三区四区五区 | 国产精品亲子伦av一区二区三区 | 久久精品国产99精品国产亚洲性色 | 欧美精品在线一区二区三区 | 一级黄色生活视频 | 国产精品久久久久久久久久妞妞 | 亚洲精品一区二区三区中文字幕 | 色婷婷久久久久swag精品 | 日韩一区二区三区av | 亚洲电影一区二区 | 波多野结衣先锋影音 | 91免费版在线看 | 亚洲a视频 | www.天天操.com | 操久久 | www.麻豆| 日韩综合 | 免费日韩成人 | 91资源在线观看 | 午夜寂寞少妇aaa片毛片 | 久久99久久久久 | 日韩中字幕 | 精品一区免费 | 欧美啪啪| 特黄特黄a级毛片免费专区 av网站免费在线观看 | 日韩在线短视频 | 日韩精品www | 国产亚洲欧美在线 | 毛片久久| 亚洲国产一区二区在线观看 | 日韩久久影院 | 成人国产精品视频 | 一呦二呦三呦国产精品 | av性色| 国产综合视频在线观看 | www国产亚洲精品久久网站 | 欧美激情一区二区三区四区 | 国产一区二区精品在线观看 | 91精品久久久久久久久 | 韩日在线观看视频 | 久久青青操 | 成年人网站国产 | 国产精品美女在线观看 | 亚洲动漫在线观看 | 欧洲成人午夜免费大片 | 精品伦精品一区二区三区视频 | 国产黑丝在线 | 国产精品久久久久久久午夜片 | 欧美日本免费一区二区三区 | 亚洲三级免费观看 | 久久久久久亚洲精品 | av在线毛片 | 欧美黑人xxx | 福利一区二区 | 日韩精品在线观看一区 | 久久成人免费视频 | 夜夜夜久久久 | 激情毛片| 亚洲成人av在线 | 亚洲综合视频在线观看 | 国产精品精品久久久 | 亚洲国产成人在线视频 | 国产九九精品 | 97成人精品视频在线观看 | 欧美激情自拍偷拍 | 国产日韩一区二区 | 亚洲国产伊人 | 亚洲午夜在线 | 操操操av| 日日精品 | 中文字幕乱码一区二区三区 | 黄色一级电影 | a免费视频| 一级毛片视频 | 国产一区二区精品丝袜 | 999视频在线免费观看 | 91精品一区二区 | 日韩在线视频一区 | 久久精品国产免费 | 国产日韩一区二区 | 伊人网av | 狠狠躁夜夜躁人人爽视频 | 日韩在线资源 | 国产精品久久久久久吹潮 | 91av官网| 中文字幕成人 | 国产激情性色视频在线观看 | 亚洲成人伦理 | a级片视频在线观看 | 日日爱视频 | 欧美福利在线观看 | 欧美日韩在线精品 | 中文在线播放 | 国产乱码精品一区二区三区中文 | 涩涩综合 | 国产福利在线 | 日韩在线 | 中文字幕亚洲一区 | 丝袜久久 | 欧美成年网站 | 亚洲av毛片一级二级在线 | 久久伊 | 亚洲91精品 | 欧美亚洲天堂 | av亚洲在线 | 亚洲经典视频在线观看 | 干干干操操操 | 亚洲一区二区视频 | 日韩在线成人 | 亚州男人天堂 | 欧美高清视频一区二区三区 | 日韩在线不卡一区 | 精品无人乱码一区二区三区 | 日韩欧美在线观看视频 | 欧美久久久 | 久色视频在线 | 国产综合亚洲精品一区二 | 久久久久91 | 国产高清精品一区二区三区 | 成人高清在线 | 精品国产一区二区三区久久久久久 | 亚洲国产成人在线视频 | 国产精品一二三 | 中文视频一区 | 欧美 日韩 国产 一区 | 日本三级全黄 | 99re视频| 免费高潮视频95在线观看网站 | 天天亚洲| 久久青| 欧美xxxx在线 | 日本女人高潮视频 | 亚洲第一区在线 | 久久久久国产成人精品亚洲午夜 | 亚洲精选国产 | 成人高清视频免费观看 | 国产视频福利在线观看 | 真人女人一级毛片免费播放 | 午夜国产在线 | 中文字幕乱码一区二区三区 | 一区二区三区亚洲精品国 | 欧美精品在线视频 | 亚洲精品视频免费看 | 日韩小视频在线播放 | 国产精品久久久久久久久福交 | 综合五月 | 二区视频 | av免费在线观看网站 | 一区二区视频网站 | 日韩久久网 | av国产精品 | 欧美99 | 综合久久99 | 日韩在线看片 | 久久久99久久久国产自输拍 | 日韩免费视频中文字幕 | 久久久精品一区二区 | 久操国产 | 最新免费av网站 | 亚洲综人网 | 久久精品国产一区二区电影 | 久久99精品久久久久蜜臀 | 久久久免费 | 亚洲一区 日韩精品 中文字幕 | 一区二区中文 | 亚洲视频免费网站 | 视频在线一区 | 成人免费视频网站在线观看 | 超碰天天 | 国产精品久久久久久一区二区三区 | av在线一区二区三区 | 精品成人佐山爱一区二区 | 精品www| 日韩在线二区 | 成人在线精品 | 99热在线观看免费 | 久久久久久久一区 | 中文字幕亚洲综合久久久软件 | 新91在线视频 | 欧美成人免费视频 | 香蕉视频在线看 | 狠狠91 | 国产一区二区欧美 | 91免费在线播放 | 午夜国产一区 | 午夜无码国产理论在线 | avhd101在线成人播放 | 欧美精品在线视频 | 精品中文字幕在线观看 | 91视频网 | 国产精品久久久久一区二区三区 | 一区二区免费视频 | 九九热这里只有 | 国产成人高清视频 | 成人午夜电影在线观看 | 视频1区2区 | 国产一区二区视频在线观看 | 国产视频精品久久 | 三级黄色片在线免费观看 | 亚洲精品一区二区 | 一区二区三区四区在线 | 国产精品极品美女在线观看免费 | 日韩成人在线播放 | 成人在线免费视频 | 亚洲精品乱码久久久久久金桔影视 | 日韩有码一区 | 在线不卡视频 | 美女一区二区三区在线观看 | 久久久久久国产精品 | av大片在线观看 | 日本一级中文字幕久久久久久 | 久久久久久网站 | 91tv亚洲精品香蕉国产一区 | 91中文字幕在线观看 | 亚洲第一黄色 | 日韩欧美一区二区在线 | 涩涩视频在线免费看 | 国产www在线 | 日韩一二三 | 精品久久久网站 | 日韩一二三区在线观看 | 亚洲精品第一页 | 91视频在线网址 | 日韩欧美精品在线 | 亚洲国产精品一区二区第一页 | 成人在线免费观看视频 | 色小妹一二三区 | 国产剧情一区二区 | 欧美在线观看一区 | 91精品国产91久久久久久 | 亚洲一区二区精品视频 | 日韩三级中文字幕 | 亚洲高清一区二区三区 | 欧美福利二区 | 亚洲精品久久 | 久草天堂 |