精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用loguru優雅的輸出日志

開發
loguru 是一個 Python 簡易且強大的第三方日志記錄庫,該庫旨在通過添加一系列有用的功能來解決標準記錄器的注意事項,從而減少 Python 日志記錄的痛苦。

Loguru: 更優雅的日志記錄解決方案!

loguru 是一個 Python 簡易且強大的第三方日志記錄庫,該庫旨在通過添加一系列有用的功能來解決標準記錄器的注意事項,從而減少 Python 日志記錄的痛苦。

1. 引入原因

簡單且方便的幫助我們輸出需要的日志信息!

  •  使用 Python 來寫程序或者腳本的話,常常遇到的問題就是需要對日志進行刪除。一方面可以幫助我們在程序出問題的時候排除問題,二來可以幫助我們記錄需要關注的信息。
  •  但是,使用自帶自帶的 logging 模塊的話,則需要我們進行不同的初始化等相關工作。對應不熟悉該模塊的同學來說,還是有些費勁的,比如需要配置 Handler/Formatter 等。 
  1. import logging  
  2. logger = logging.getLogger('xxx')  
  3. handler = logging.StreamHandler()  
  4. formatter = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s')  
  5. handler.setFormatter(formatter)  
  6. logger.addHandler(handler)  
  7. logger.setLevel(logging.DEBUG)  
  8. logger.debug('This is a %s', 'test') 
  •  而 loguru 就是一個可以 開箱即用 的日志記錄模塊,我們不再需要復雜的初始化操作就可以通過如下命令來記錄日志信息了。 
  1. # pip  
  2. $ pip install loguru 

2. 功能特性

有很多優點,以下列舉了其中比較重要的幾點!

  •  開箱即用,無需準備
  •  無需初始化,導入函數即可使用
  •  更容易的文件日志記錄與轉存/保留/壓縮方式
  •  更優雅的字符串格式化輸出
  •  可以在線程或主線程中捕獲異常
  •  可以設置不同級別的日志記錄樣式
  •  支持異步,且線程和多進程安全
  •  支持惰性計算
  •  適用于腳本和庫
  •  完全兼容標準日志記錄
  •  更好的日期時間處理

3. 快速上手

介紹 loguru 的常用操作和功能介紹!

[1] 開箱即用,無需準備

  •      loguru 并沒有什么黑科技,只是它預先幫助我們設置好了相關的配置,我們導入之后即可直接使用。 
  1. from loguru import logger  
  2. logger.debug("That's it, beautiful and simple logging!")  

[2] 無需初始化,導入函數即可使用

  •  如何添加處理程序(handler)呢?
  •  如何設置日志格式(logs formatting)呢?
  •  如何過濾消息(filter messages)呢?
  •  如何如何設置級別(log level)呢? 
  1. # add  
  2. logger.add(sys.stderr, \  
  3.     format="{time} {level} {message}",\  
  4.     filter="my_module",\  
  5.     level="INFO"

[3] 更容易的文件日志記錄與轉存/保留/壓縮方式 

  1. # 日志文件記錄  
  2. logger.add("file_{time}.log")  
  3. # 日志文件轉存  
  4. logger.add("file_{time}.log", rotation="500 MB" 
  5. logger.add("file_{time}.log", rotation="12:00" 
  6. logger.add("file_{time}.log", rotation="1 week" 
  7. # 多次時間之后清理  
  8. logger.add("file_X.log", retention="10 days" 
  9. # 使用zip文件格式保存  
  10. logger.add("file_Y.log", compression="zip"

[4] 更優雅的字符串格式化輸出 

  1. logger.info(  
  2.     "If you're using Python {}, prefer {feature} of course!",  
  3.     3.6, feature="f-strings"

[5] 在線程或主線程中捕獲異常 

  1. @logger.catch  
  2. def my_function(x, y, z):  
  3.     # An error? It's caught anyway!  
  4.     return 1 / (x + y + z)  
  5. my_function(0, 0, 0) 

[6] 可以設置不同級別的日志記錄樣式

  •  Loguru 會自動為不同的日志級別,添加不同的顏色進行區分,當然我們也是可以自定義自己喜歡的顯示顏色樣式的。 
  1. logger.add(sys.stdout,  
  2.     colorize=True 
  3.     format="<green>{time}</green> <level>{message}</level>" 
  4. logger.add('logs/z_{time}.log',  
  5.            level='DEBUG' 
  6.            format='{time:YYYY-MM-DD :mm:ss} - {level} - {file} - {line} - {message}' 
  7.            rotation="10 MB"

[7] 支持異步且線程和多進程安全

  •  默認情況下,添加到 logger 中的日志信息都是線程安全的。但這并不是多進程安全的,我們可以通過添加 enqueue 參數來確保日志完整性。
  •  如果我們想要在異步任務中使用日志記錄的話,也是可以使用同樣的參數來保證的。并且通過 complete() 來等待執行完成。 
  1. # 異步寫入  
  2. logger.add("some_file.log", enqueue=True 

[8] 異常的完整性描述

  •  用于記錄代碼中發生的異常的 bug 跟蹤,Loguru 通過允許顯示整個堆棧跟蹤(包括變量值)來幫助您識別問題。 
  1. logger.add("out.log", backtrace=Truediagnose=True 
  2. def func(a, b):  
  3.     return a / b  
  4. def nested(c):  
  5.     try:  
  6.         func(5, c)  
  7.     except ZeroDivisionError:  
  8.         logger.exception("What?!")  
  9. nested(0) 

[9] 結構化日志記錄

  •  對日志進行序列化以便更容易地解析或傳遞數據結構,使用序列化參數,在將每個日志消息發送到配置的接收器之前,將其轉換為 JSON 字符串。
  •  同時,使用 bind() 方法,可以通過修改額外的 record 屬性來將日志記錄器消息置于上下文中。還可以通過組合 bind() 和 filter 對日志進行更細粒度的控制。
  •  最后 patch() 方法允許將動態值附加到每個新消息的記錄 dict 上。 
  1. # 序列化為json格式  
  2. logger.add(custom_sink_function, serialize=True 
  3. # bind方法的用處  
  4. logger.add("file.log", format="{extra[ip]} {extra[user]} {message}" 
  5. context_logger = logger.bind(ip="192.168.0.1"user="someone" 
  6. context_logger.info("Contextualize your logger easily")  
  7. context_logger.bind(user="someone_else").info("Inline binding of extra attribute")  
  8. context_logger.info("Use kwargs to add context during formatting: {user}", user="anybody" 
  9. # 粒度控制  
  10. logger.add("special.log", filter=lambda record: "special" in record["extra"])  
  11. logger.debug("This message is not logged to the file")  
  12. logger.bind(special=True).info("This message, though, is logged to the file!")  
  13. # patch()方法的用處  
  14. logger.add(sys.stderr, format="{extra[utc]} {message}" 
  15. loggerlogger = logger.patch(lambda record: record["extra"].update(utc=datetime.utcnow())) 

[10] 惰性計算

  •  有時希望在生產環境中記錄詳細信息而不會影響性能,可以使用 opt() 方法來實現這一點。 
  1. logger.opt(lazy=True).debug("If sink level <= DEBUG: {x}", x=lambda: expensive_function(2**64))  
  2. # By the way, "opt()" serves many usages  
  3. logger.opt(exception=True).info("Error stacktrace added to the log message (tuple accepted too)")  
  4. logger.opt(colors=True).info("Per message <blue>colors</blue>")  
  5. logger.opt(record=True).info("Display values from the record (eg. {record[thread]})")  
  6. logger.opt(raw=True).info("Bypass sink formatting\n")  
  7. logger.opt(depth=1).info("Use parent stack context (useful within wrapped functions)")  
  8. logger.opt(capture=False).info("Keyword arguments not added to {dest} dict", dest="extra"

[11] 可定制的級別 

  1. new_level = logger.level("SNAKY", no=38color="<yellow>"icon="🐍" 
  2. logger.log("SNAKY", "Here we go!") 

[12] 適用于腳本和庫 

  1. # For scripts  
  2. config = {  
  3.     "handlers": [  
  4.         {"sink": sys.stdout, "format": "{time} - {message}"},  
  5.         {"sink": "file.log", "serialize": True},  
  6.     ],  
  7.     "extra": {"user": "someone"}  
  8.  
  9. logger.configure(**config)  
  10. # For libraries  
  11. logger.disable("my_library")  
  12. logger.info("No matter added sinks, this message is not displayed")  
  13. logger.enable("my_library")  
  14. logger.info("This message however is propagated to the sinks") 

[13] 完全兼容標準日志記錄

  •  希望使用 Loguru 作為內置的日志處理程序?
  •  需要將 Loguru 消息到標準日志?
  •  想要攔截標準的日志消息到 Loguru 中匯總? 
  1. handler = logging.handlers.SysLogHandler(address=('localhost', 514)) 
  2. logger.add(handler)  
  1. class PropagateHandler(logging.Handler):  
  2.     def emit(self, record):  
  3.         logging.getLogger(record.name).handle(record)  
  4. logger.add(PropagateHandler(), format="{message}" 
  1. class InterceptHandler(logging.Handler):  
  2.     def emit(self, record):  
  3.         # Get corresponding Loguru level if it exists  
  4.         try:  
  5.             level = logger.level(record.levelname).name  
  6.         except ValueError:  
  7.             level = record.levelno  
  8.         # Find caller from where originated the logged message  
  9.         frame, depth = logging.currentframe(), 2  
  10.         while frame.f_code.co_filename == logging.__file__:  
  11.             frameframe = frame.f_back  
  12.             depth += 1  
  13.         logger.opt(depthdepth=depth, exception=record.exc_info).log(level, record.getMessage())  
  14. logging.basicConfig(handlers=[InterceptHandler()], level=0

[14] 方便的解析器

  •  從生成的日志中提取特定的信息通常很有用,這就是為什么 Loguru 提供了一個 parse() 方法來幫助處理日志和正則表達式。 
  1. pattern = r"(?P<time>.*) - (?P<level>[0-9]+) - (?P<message>.*)"  # Regex with named groups  
  2. caster_dict = dict(time=dateutil.parser.parse, level=int)        # Transform matching groups  
  3. for groups in logger.parse("file.log", pattern, cast=caster_dict):  
  4.     print("Parsed:", groups) 
  5.     # {"level": 30, "message": "Log example", "time": datetime(2018, 12, 09, 11, 23, 55)} 

[15] 通知機制 

  1. import notifiers  
  2. params = {  
  3.     "username": "you@gmail.com",  
  4.     "password": "abc123",  
  5.     "to": "dest@gmail.com"  
  6.  
  7. # Send a single notification  
  8. notifier = notifiers.get_notifier("gmail")  
  9. notifier.notify(message="The application is running!", **params)  
  10. # Be alerted on each error message  
  11. from notifiers.logging import NotificationHandler  
  12. handler = NotificationHandler("gmail", defaults=params 
  13. logger.add(handler, level="ERROR"

[16] Flask 框架集成

  •  現在最關鍵的一個問題是如何兼容別的 logger,比如說 tornado 或者 django 有一些默認的 logger。
  •  經過研究,最好的解決方案是參考官方文檔的,完全整合 logging 的工作方式。比如下面將所有的 logging都用 loguru 的 logger 再發送一遍消息。 
  1. import logging  
  2. import sys  
  3. from pathlib import Path  
  4. from flask import Flask  
  5. from loguru import logger  
  6. app = Flask(__name__)  
  7. class InterceptHandler(logging.Handler):  
  8.     def emit(self, record):  
  9.         loggerlogger_opt = logger.opt(depth=6exception=record.exc_info)  
  10.         logger_opt.log(record.levelname, record.getMessage())  
  11. def configure_logging(flask_app: Flask):  
  12.     """配置日志"""  
  13.     path = Path(flask_app.config['LOG_PATH'])  
  14.     if not path.exists():  
  15.         path.mkdir(parents=True 
  16.     log_name = Path(path, 'sips.log')  
  17.     logging.basicConfig(handlers=[InterceptHandler(level='INFO')], level='INFO' 
  18.     # 配置日志到標準輸出流  
  19.     logger.configure(handlers=[{"sink": sys.stderr, "level": 'INFO'}])  
  20.     # 配置日志到輸出到文件  
  21.     logger.add(log_name, rotation="500 MB"encoding='utf-8'colorize=Falselevel='INFO'

4. 要點解析

介紹,主要函數的使用方法和細節 - add()的創建和刪除

  •  add() - 非常重要的參數 sink 參數
    •   具體的實現規范可以參見官方文檔
    •   可以實現自定義 Handler 的配置,比如 FileHandler、StreamHandler 等等
    •   可以自行定義輸出實現
    •   代表文件路徑,會自動創建對應路徑的日志文件并將日志輸出進去
    •   例如 sys.stderr 或者 open('file.log', 'w') 都可以
    •   可以傳入一個 file 對象
    •   可以直接傳入一個 str 字符串或者 pathlib.Path 對象
    •   可以是一個方法
    •   可以是一個 logging 模塊的 Handler
    •   可以是一個自定義的類 
  1. def add(self, sink, *,  
  2.     level=_defaults.LOGURU_LEVEL, format=_defaults.LOGURU_FORMAT,  
  3.     filter=_defaults.LOGURU_FILTER, colorize=_defaults.LOGURU_COLORIZE,  
  4.     serialize=_defaults.LOGURU_SERIALIZE, backtrace=_defaults.LOGURU_BACKTRACE,  
  5.     diagnose=_defaults.LOGURU_DIAGNOSE, enqueue=_defaults.LOGURU_ENQUEUE,  
  6.     catch=_defaults.LOGURU_CATCH, **kwargs  
  7. ): 
  •  另外添加 sink 之后我們也可以對其進行刪除,相當于重新刷新并寫入新的內容。刪除的時候根據剛剛 add 方法返回的 id 進行刪除即可。可以發現,在調用 remove 方法之后,確實將歷史 log 刪除了。但實際上這并不是刪除,只不過是將 sink 對象移除之后,在這之前的內容不會再輸出到日志中,這樣我們就可以實現日志的刷新重新寫入操作 
  1. from loguru import logger  
  2. trace = logger.add('runtime.log')  
  3. logger.debug('this is a debug message')  
  4. logger.remove(trace)  
  5. logger.debug('this is another debug message')  

 

責任編輯:龐桂玉 來源: 馬哥Linux運維
相關推薦

2015-11-26 10:53:45

LinuxWindowsMac OS

2017-07-26 11:32:50

NETRabbitMQ系統集成

2023-06-16 09:08:39

ReactContextRFC

2024-12-18 12:10:00

2023-02-23 08:00:27

PostgreSQPrometheus指標

2022-09-14 08:16:48

裝飾器模式對象

2021-03-28 09:17:18

JVM場景鉤子函數

2024-09-27 12:27:31

2024-10-18 08:53:49

SpringMybatis微服務

2025-07-09 07:20:00

GORMGo分頁

2022-01-10 09:35:50

日志語言解析器

2023-03-06 11:36:13

SpingBoot注解

2021-04-20 08:00:31

Redisson關閉訂單支付系統

2022-06-02 10:02:47

Kubectl更新應用Linux

2022-10-27 11:23:26

GoFrame共享變量

2021-09-29 09:50:41

Linux內核日志

2021-09-08 05:46:51

Linux內核日志

2021-08-10 07:41:24

ContextWaitGroupGoroutine

2023-06-28 08:25:14

事務SQL語句

2021-11-23 10:45:57

StopWatch代碼Java
點贊
收藏

51CTO技術棧公眾號

婷婷久久综合九色综合伊人色| 九九热在线视频观看这里只有精品| 亚洲国产婷婷香蕉久久久久久| 日本a在线免费观看| 五月激情婷婷网| 日本成人中文字幕| 九九热精品视频国产| 97人妻天天摸天天爽天天| www.成人影院| 有坂深雪av一区二区精品| 精品日韩欧美| 亚洲图片视频小说| 精品成人在线| 中文字幕在线看视频国产欧美| 成年人看片网站| 欧美va在线| 亚洲午夜日本在线观看| 色噜噜一区二区| 黄色三级网站在线观看| 蜜桃视频在线一区| 91福利视频网| 欧美日韩大片在线观看| 久久精品av| 日韩精品在线影院| www.四虎在线| crdy在线观看欧美| 日本丰满少妇一区二区三区| 精品视频在线观看一区二区| 在线观看精品一区二区三区| 91丝袜呻吟高潮美腿白嫩在线观看| 国产乱肥老妇国产一区二| 日本在线免费观看| 欧美久久久久| 视频在线一区二区| 无码人妻aⅴ一区二区三区69岛| 亚洲天堂av资源在线观看| 欧美日韩三级在线| 国产第一页视频| 91九色国产在线播放| 亚洲精品精品亚洲| 男插女免费视频| 阿v免费在线观看| 久久久久国产精品人| 久久精品成人一区二区三区蜜臀| 亚洲成人中文字幕在线| 国产酒店精品激情| 国产原创欧美精品| 艳妇乳肉豪妇荡乳av| 久久久久免费| 欧美中文字幕精品| aaa人片在线| 午夜久久99| 久久97久久97精品免视看| 久久久99999| 国产精品99一区二区三| 影音先锋日韩有码| 四虎影成人精品a片| 国产99久久久国产精品成人免费| 亚洲国产小视频在线观看| 日韩精品视频一区二区| 国产精品视频3p| 亚洲国产精品美女| 中文乱码人妻一区二区三区视频| 91精品国产自产在线丝袜啪| 欧美电影精品一区二区| 久久久久久久穴| 国产精品三p一区二区| 亚洲国产高清自拍| 北岛玲一区二区| 西野翔中文久久精品字幕| 亚洲欧美日韩中文在线制服| 精品人妻无码一区二区三区换脸| blacked蜜桃精品一区| 一区二区三区亚洲| 国产美女福利视频| 欧美日本亚洲韩国国产| 久久琪琪电影院| 在线观看免费av片| 老司机精品导航| 国产伦精品免费视频| 国产精品熟女久久久久久| 国产精品一区二区久久不卡| 韩国成人一区| 精品亚洲综合| 亚洲日本在线观看| 欧美在线一区视频| 欧美片第一页| 欧美一区二区三区精品| 波多野结衣一二三区| 国产成人久久| 久久中文字幕国产| 91精品国产乱码久久久张津瑜| 久久精品卡一| 18成人免费观看网站下载| 四虎精品一区二区三区| 久久精品男人天堂av| 国产免费色视频| wwwww亚洲| 在线观看中文字幕不卡| 韩国一区二区在线播放| 久久97精品| 精品国产一区av| 欧美一二三区视频| 精品制服美女久久| 精品欧美一区二区三区久久久| 3p在线观看| 亚洲成人动漫av| 日本 片 成人 在线| 国产成人福利av| 日韩中文字幕精品| 国产一级精品视频| 国产一区二区成人久久免费影院| 国产综合欧美在线看| 浪潮av一区| 色婷婷综合久色| 亚洲精品久久一区二区三区777 | 成人在线免费电影| 亚洲综合色视频| 鲁一鲁一鲁一鲁一av| 日韩电影在线观看完整免费观看| 久久精品久久久久久国产 免费| 亚洲日本韩国在线| 国产福利视频一区二区三区| 日韩精品不卡| 一区二区三区短视频| 欧美大胆人体bbbb| 日本爱爱小视频| 日韩成人伦理电影在线观看| 国产私拍一区| 日本大胆在线观看| 555www色欧美视频| 内射毛片内射国产夫妻| 午夜亚洲福利在线老司机| 成人av蜜桃| 黄色av网站在线播放| 欧美亚洲综合网| 男人天堂av电影| 一本久道久久久| 动漫精品视频| 手机av在线播放| 日韩天堂在线观看| 91日韩中文字幕| 激情久久五月天| 亚洲精品久久区二区三区蜜桃臀| 日韩精品三区| 亚洲性线免费观看视频成熟| 在线观看日本视频| 91丨九色丨国产丨porny| 亚洲国产精品无码av| 我要色综合中文字幕| 欧美成人午夜激情视频| av小说天堂网| 亚洲另类一区二区| 美女流白浆视频| 精品成人国产| 精品欧美一区二区三区久久久| 九色porny丨国产首页在线| 精品视频—区二区三区免费| 久草国产精品视频| 91丨国产丨九色丨pron| 欧美激情精品久久久久久小说| 你懂的一区二区三区| 全球成人中文在线| www.视频在线.com| 欧美精品高清视频| 在线免费日韩av| 成人精品一区二区三区中文字幕| 日韩黄色片在线| 琪琪久久久久日韩精品| 26uuu另类亚洲欧美日本老年| 天天在线女人的天堂视频| 亚洲444eee在线观看| 性色av蜜臀av色欲av| 日韩电影免费在线观看网站| 午夜欧美性电影| 日韩欧美久久| 4388成人网| 91caoporm在线视频| 日韩一区和二区| 日韩熟女精品一区二区三区| 国产视频一区二区在线| 日韩在线一区视频| 影音先锋国产精品| 奇米视频888战线精品播放| 一区在线不卡| 国内久久久精品| aiai在线| 亚洲精品在线三区| 中文字幕+乱码+中文乱码www| 成人免费在线视频| 精品人妻伦一二三区久| 日韩av一二三| 日韩人妻无码精品久久久不卡| 妖精视频一区二区三区| 91免费电影网站| 手机av在线| 另类天堂视频在线观看| 视频国产在线观看| 欧美一区二区久久久| 亚洲日本视频在线观看| 亚洲人精品一区| 亚洲天堂视频一区| 国产精品2024| 黑森林精品导航| 尤物网精品视频| 中文字幕乱码一区二区三区| 日韩美脚连裤袜丝袜在线| 国产一区欧美二区三区| 日本三级一区| 色综合久久久888| 波多野结衣在线网站| 精品久久人人做人人爽| 91在线精品入口| 一本色道a无线码一区v| 免费毛片在线播放免费 | 欧美成人aa大片| 成人黄色三级视频| 激情成人中文字幕| 视频这里只有精品| 国产精品久久夜| 免费看污片网站| 99精品视频在线播放观看| 欧美性猛交xxxx乱大交91| 日韩国产欧美视频| 亚洲欧洲日产国码无码久久99| 欧美1区3d| 中文字幕超清在线免费观看| 波多野结衣一区| 欧美男人的天堂| 日本一区福利在线| 国产欧美日韩视频一区二区三区| 99精品美女视频在线观看热舞 | 男的插女的下面视频| 91九色精品| 一区二区在线观看网站| 日韩av大片| 天堂精品一区二区三区| 精品在线播放| 欧美一区二区三区成人久久片| 久久悠悠精品综合网| 国产伦精品一区二区三区免| 99精品国产一区二区三区2021 | 国产成人久久精品77777综合| 欧美日本乱大交xxxxx| 中文字幕在线播放av| 欧美亚洲一区二区在线| 国产天堂第一区| 在线亚洲免费视频| 小泽玛利亚一区二区三区视频| 色老汉av一区二区三区| 无码日韩精品一区二区| 在线区一区二视频| 国产三级理论片| 欧美裸体一区二区三区| 国产精品久久婷婷| 91精品国产色综合久久不卡蜜臀| 国产精品亚洲欧美在线播放| 欧美日韩三级一区| 国产视频在线观看视频| 日韩视频免费观看高清完整版 | 成人的网站免费观看| 四虎精品一区二区| 91免费观看视频| 一区二区黄色片| 国产精品久久久久一区二区三区共| 男人天堂资源网| 亚洲人成人一区二区在线观看| 国语对白在线播放| 亚洲国产精品一区二区www在线 | 国产手机视频一区二区| 久久精品国产精品亚洲色婷婷| 久久久夜精品| 奇米视频888| 国产成人一区二区精品非洲| wwwxx日本| 国产欧美一区二区三区沐欲| 国精产品久拍自产在线网站| 一区二区三区在线观看国产| 91国产丝袜播放在线| 欧美视频在线一区| 精品人妻少妇AV无码专区| 亚洲风情亚aⅴ在线发布| porn亚洲| 欧美大片免费观看在线观看网站推荐| 国内激情视频在线观看| 国产精品色婷婷视频| 亚洲三级av| 色综合666| 精品999日本| a在线观看免费视频| 国产传媒久久文化传媒| 黑人巨大精品欧美| 亚洲女同一区二区| 中文字幕精品三级久久久| 欧美精品乱码久久久久久 | 豆花视频一区| 九9re精品视频在线观看re6 | 久久精品国产69国产精品亚洲 | 亚洲电影影音先锋| www国产黄色| 国产一区二区美女诱惑| 亚洲第一香蕉网| 一区二区三区资源| 最新国产中文字幕| 欧美精品一区二区三| 日本暖暖在线视频| 4438全国成人免费| 中文一区二区三区四区| 午夜精品一区二区在线观看的 | 日韩欧美字幕| 波多野结衣家庭教师在线播放| 精品一二线国产| 亚洲天堂久久新| 亚洲一线二线三线视频| 91av国产精品| 国产性色av一区二区| 成人在线黄色电影| 亚洲xxxxx性| 成人嘿咻视频免费看| 国产二区视频在线播放| 国产激情一区二区三区| 性少妇xx生活| 在线欧美日韩精品| 日漫免费在线观看网站| 欧美国产日韩xxxxx| www一区二区三区| 亚洲国产精品www| 狂野欧美一区| 91精品人妻一区二区三区| 欧美性黄网官网| 人妻偷人精品一区二区三区| 欧美裸体xxxx极品少妇| 99久久999| 一区二区高清视频| 日韩精品福利网| 精品国产av无码| 日韩欧美福利视频| 日本韩国一区| 欧美中文字幕视频在线观看| 人人香蕉久久| 国产成人精品视频免费看| 97久久超碰国产精品电影| xxxxxx国产| 日韩国产欧美精品一区二区三区| 韩国成人免费视频| 国产日韩一区二区| 9国产精品视频| 久久丫精品国产亚洲av不卡| 精品久久久视频| 男男电影完整版在线观看| 青草青草久热精品视频在线观看| 羞羞色国产精品网站| 免费观看精品视频| 久久精品日韩一区二区三区| 精品久久久久久久久久久久久久久久| 亚洲欧美综合区自拍另类| 自拍偷自拍亚洲精品被多人伦好爽| 欧美成人综合一区| 丝瓜av网站精品一区二区| 性欧美一区二区| 欧美日韩国产成人在线91| 免费在线观看黄色| 97夜夜澡人人双人人人喊| 亚洲午夜伦理| 国产又粗又长又爽| 色综合色综合色综合色综合色综合| 国产福利在线| 91久久精品国产91久久性色| 好吊视频一区二区三区四区| 亚洲一级av无码毛片精品| 色综合视频一区二区三区高清| 瑟瑟视频在线| 99re视频在线| 久久精品伊人| 一级片一级片一级片| 精品va天堂亚洲国产| 在线日韩影院| 亚洲一区二区三区免费观看| 国产高清一区日本| 欧美激情亚洲综合| 色偷偷9999www| 国产厕拍一区| 999精彩视频| 一区二区欧美视频| 福利在线观看| 国产精品一区二区你懂得| 日韩国产在线一| 免费无码毛片一区二区app| 亚洲欧美国产制服动漫| 精品国产18久久久久久二百| 红桃av在线播放| 一区二区不卡在线播放| 国产福利在线视频| 国产精品一区二区三区观看| 美女精品一区二区| 五月天婷婷综合网| 久久不射电影网| 国产调教一区二区三区| 国产日韩视频一区| 欧美日韩国产电影|