精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧亚av在线| 在线观看毛片网站| 丝袜美腿综合| 欧美性猛交一区二区三区精品| 视频在线一区二区三区| 99精品视频免费看| 美女诱惑一区| 欧美裸体男粗大视频在线观看| 久久久久麻豆v国产精华液好用吗| 澳门av一区二区三区| 一区二区三区视频在线看| 精品欧美一区二区三区久久久| 国内av在线播放| 合欧美一区二区三区| 亚洲网在线观看| 一二三区视频在线观看| 日韩一区二区三区在线免费观看| 亚洲免费观看视频| 久久久久久久久99精品| 97人人在线视频| 欧美极品jizzhd欧美仙踪林| 少妇精品无码一区二区| av电影在线免费| 国产精品免费久久久久| 国产精品一区二区三区在线 | 在线看片福利| 亚洲人成人一区二区在线观看| 乱色588欧美| 亚洲精品久久久蜜桃动漫| 美女网站色91| 日本国产精品视频| 久久久精品国产sm调教网站| 欧美aaaaaaaaaaaa| 亚洲欧洲在线看| 少妇精品无码一区二区三区| 国产一区二区视频在线看| 91黄色免费版| 亚洲国产精品久久久久爰色欲| 污污的视频在线观看| 国产精品另类一区| 色一情一区二区三区四区| 欧洲毛片在线| 久久综合久久综合久久| 精品蜜桃一区二区三区| 成人乱码一区二区三区| 国产精品综合一区二区三区| 国产精品成熟老女人| 久久久久在线视频| 免费看黄裸体一级大秀欧美| 26uuu日韩精品一区二区| 国产在线成人精品午夜| 国产综合精品一区| 欧美伦理91i| 九九热精品在线观看| 最新欧美人z0oozo0| 久久精品亚洲国产| 国产精品视频一区二区三 | 久久久久久久久岛国免费| 精品久久久久久一区| 亚洲欧美激情在线观看| 成人午夜视频在线| 国内精品久久久久久久果冻传媒| 色哟哟中文字幕| av欧美精品.com| 精品国产一区二区三区四区vr | 久久久精品在线观看| 亚洲色图100p| 欧美福利在线| 久久久噜噜噜久久| 9i精品福利一区二区三区| 久久久久久亚洲精品杨幂换脸| 日本亚洲精品在线观看| 亚洲不卡在线视频| 免费的国产精品| 91免费版黄色| 少妇av在线播放| 久久久精品tv| 中国一级黄色录像| 欧美黑人xx片| 色综合天天综合网天天看片| 国产精品视频黄色| 国产精品一站二站| 日韩不卡在线观看| 亚洲综合第一区| 欧美1区2区| 日本精品久久久| 亚洲视频久久久| 成人丝袜视频网| 欧美尤物一区| av免费看在线| 色婷婷激情久久| 亚洲18在线看污www麻豆| 嗯用力啊快一点好舒服小柔久久| 日韩久久精品成人| 亚洲视频重口味| 日韩视频一区二区三区在线播放免费观看| 欧美做受高潮电影o| 亚洲无码久久久久| 成人动漫在线一区| 亚洲一区三区| 欧美13videosex性极品| 4hu四虎永久在线影院成人| 在线看黄色的网站| 天天插综合网| 欧洲亚洲免费在线| 午夜精品久久久久久久99| 久久丝袜美腿综合| www国产免费| 成人啊v在线| 亚洲成人亚洲激情| 手机在线中文字幕| 久久久国产精品一区二区中文| 亚洲japanese制服美女| 国产在线资源| 欧美日韩免费一区| 无码人妻少妇色欲av一区二区| 神马电影久久| 久久久久亚洲精品| 国产精品女人久久久| 久久久精品免费免费| 日本a在线免费观看| 99视频有精品高清视频| 亚洲三级黄色在线观看| 日韩av在线播| 成人免费看的视频| 激情视频小说图片| 色8久久久久| 亚洲系列中文字幕| 91精品国产高清一区二区三密臀| 国产成人精品免费在线| 欧美一级黄色录像片| 精品三级在线| 一区二区三区无码高清视频| 99久久精品国产亚洲| 成人v精品蜜桃久久一区| www.男人天堂网| 日韩高清在线观看一区二区| 久久精品久久久久久| 中文 欧美 日韩| 国产日韩欧美在线一区| 91视频最新入口| 性人久久久久| 日本欧美精品在线| 国产最新视频在线| 在线一区二区视频| 国产精品揄拍100视频| 亚洲尤物精选| 欧美韩国日本精品一区二区三区| 欧美久久天堂| 亚洲人a成www在线影院| 日本熟女毛茸茸| 久久婷婷成人综合色| 成年人网站大全| 欧洲福利电影| 国产在线高清精品| aa在线视频| 亚洲精品一区二区三区影院| 日韩污视频在线观看| 成人av在线影院| 日韩欧美一区三区| 欧美极品中文字幕| 国产精品亚洲综合天堂夜夜| 午夜不卡视频| 日韩欧美中文一区二区| 不卡的免费av| 91在线你懂得| 91网址在线播放| 先锋资源久久| 国产精品免费一区二区三区| 理论片午夜视频在线观看| 亚洲欧美国产精品| 中文字幕乱码无码人妻系列蜜桃| 国产精品美女久久福利网站| 少妇性l交大片7724com| aa国产精品| 性高潮久久久久久久久| 国产日韩一区二区三免费高清| 欧美高清在线观看| 欧美女v视频| 欧美精品一二三区| 久久一级黄色片| 久久久777精品电影网影网 | 日韩一区二区三区四区五区| 欧美美最猛性xxxxxx| 亚州av在线播放| 欧美亚洲一区三区| 久久久精品人妻一区二区三区四| 91尤物视频在线观看| 五月婷婷之综合激情| 欧美久久综合| 神马影院我不卡午夜| 日韩欧美高清一区二区三区| 国产成人a亚洲精品| 高h视频在线观看| 精品视频在线观看日韩| 97人妻精品一区二区三区| 亚洲.国产.中文慕字在线| 少妇愉情理伦三级| 99久久免费视频.com| 欧美一级xxxx| 久久久国产精品一区二区中文| 日本xxx免费| 国产精品美女久久久久久不卡| 91麻豆国产精品| 免费成人动漫| 欧美高清第一页| 三级外国片在线观看视频| 日韩国产在线看| 国产视频手机在线| 在线一区二区三区| 欧美三级韩国三级日本三斤在线观看| 国产精品美女久久久久aⅴ| 精品人妻一区二区三区视频| 国产成人自拍网| 三级av免费观看| 久久精品日产第一区二区| 亚洲国产精品成人天堂| 亚洲综合自拍| 一区二区冒白浆视频| 精品国产一区二区三区香蕉沈先生 | 精品视频在线播放免| 国产草草影院ccyycom| 欧美天堂一区二区三区| 岛国av中文字幕| 午夜精品久久久久久久久久久| 波多野结衣亚洲一区二区| 国产精品无遮挡| 欧美图片第一页| 91丨porny丨蝌蚪视频| 国产原创剧情av| 国产精品1区2区| 污污的视频免费观看| 蜜桃久久久久久久| 日本久久精品一区二区| 久久久久久穴| 国产精品亚洲二区在线观看| 亚洲一区不卡| 国产福利视频在线播放| 亚洲欧美成人综合| 日批视频在线免费看| 一本久道综合久久精品| 国产人妻777人伦精品hd| 影音先锋在线一区| 免费一级特黄毛片| 日韩午夜在线| 无码aⅴ精品一区二区三区浪潮 | 日本视频在线观看一区二区三区| 精品国产成人系列| 囯产精品一品二区三区| 亚洲成人久久一区| 亚洲区小说区图片区| 精品一区二区电影| 巨骚激情综合| 在线电影欧美日韩一区二区私密| jizz在线观看视频| 神马国产精品影院av| 老司机精品视频在线观看6| 久久在线免费视频| 久久电影网站| 51精品在线观看| 天然素人一区二区视频| 国产日韩中文字幕| 天堂av一区| 精品欧美一区二区在线观看视频| 亚洲成在人线免费观看| 日产国产精品精品a∨| 色999国产精品| 久久久99精品视频| 亚洲美女少妇无套啪啪呻吟| 女人扒开屁股爽桶30分钟| 日韩精品一级中文字幕精品视频免费观看 | 在线a欧美视频| 成人毛片av在线| 91精品国产高清自在线看超| 久久91导航| 91美女福利视频高清| 国产精品美女在线观看直播| 欧美亚洲另类久久综合| 欧美1级片网站| 每日在线观看av| 日韩专区欧美专区| 无人码人妻一区二区三区免费| 成人白浆超碰人人人人| 国产三级在线观看完整版| 一卡二卡三卡日韩欧美| 秋霞精品一区二区三区| 这里只有精品电影| 欧美一级性视频| 日韩在线视频导航| 91色在线看| 国产女人18毛片水18精品| 91大神精品| 亚洲激情一区二区| 亚洲黄色天堂| 亚洲免费在线播放视频| 久久综合久久鬼色| 色在线观看视频| 色综合亚洲欧洲| 国产高清在线观看视频| 亚洲深夜福利网站| 亚洲精品天堂| 国产日韩专区在线| 亚洲春色h网| 亚洲乱码日产精品bd在线观看| 青青草视频一区| 亚洲综合自拍网| 亚洲视频 欧洲视频| 天堂av免费在线观看| 亚洲国产日韩欧美在线图片| 免费黄色电影在线观看| 欧美专区在线视频| 大伊香蕉精品在线品播放| 中文字幕一区二区三区在线乱码 | 制服.丝袜.亚洲.中文.综合懂| 久久久精品国产免大香伊| 久久久精品视频免费| 正在播放亚洲一区| 97视频在线观看网站| 97免费在线视频| 亚洲经典视频| 干日本少妇视频| 久久97超碰色| wwwww黄色| 在线观看一区不卡| 天堂av中文字幕| 久久久免费精品视频| 日韩精品一区二区三区免费视频| 亚洲欧美精品| 热久久国产精品| 免费看裸体网站| 色婷婷精品大在线视频 | 2020日本不卡一区二区视频| 久久精品国产av一区二区三区| 91精品国产综合久久久蜜臀粉嫩| av电影在线播放高清免费观看| 欧美在线观看一区二区三区| 久久成人福利| 欧美成人三级在线视频| 国产成人免费视频网站| 久久久久久天堂| 欧美一区二区二区| 在线观看的网站你懂的| 91在线看www| 欧美精品一卡| 国产精品99久久久精品无码| 夜夜嗨av一区二区三区| 黄色片网站免费在线观看| 欧美极度另类性三渗透| 亚洲开心激情| 亚洲熟妇av日韩熟妇在线| 99久久精品国产导航| 国产一级18片视频| 亚洲欧美一区二区三区四区| 羞羞影院欧美| 亚洲欧美一区二区原创| 极品销魂美女一区二区三区| 国产女人18水真多毛片18精品| 日韩视频在线观看一区二区| 啦啦啦中文在线观看日本| 国产精品毛片va一区二区三区| 亚洲美女少妇无套啪啪呻吟| 91视频免费观看网站| 欧美日韩一区二区三区四区 | 亚洲自拍第三页| 亚洲影院免费观看| 神马亚洲视频| 国产精品99久久久久久久久 | 高清精品视频| 欧美日韩国产精品激情在线播放| 久久精子c满五个校花| 中文字幕在线观看视频一区| 久久精品99国产精品酒店日本| 国产精品亚洲一区二区在线观看| 国产va亚洲va在线va| 91尤物视频在线观看| 在线观看国产小视频| 欧美韩国理论所午夜片917电影| 老司机在线精品视频| 北条麻妃在线视频| 亚洲日本青草视频在线怡红院 | 精品一级视频| 熟女少妇在线视频播放| 中文无字幕一区二区三区| 午夜久久久久久久久久| 欧美一区二区三区免费视| 成人中文在线| 无码人妻久久一区二区三区蜜桃| 狠狠久久亚洲欧美专区| 欧美激情视频在线播放| 国产美女精品在线观看| 免费一级片91| 日本视频www| 日韩在线视频线视频免费网站| 北条麻妃一区二区三区在线| 天天操天天爱天天爽| 偷拍一区二区三区| 麻豆网在线观看| 欧洲精品亚洲精品| 成人综合激情网| 夜夜躁狠狠躁日日躁av|