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

日志配置熱更新技術實踐

開發 開發工具
一個簡單的日志配置熱更新嘗試,串聯起了logback的自定義配置加載原理,apollo的配置中心使用方法和事件監聽機制,以及springboot日志管理和自動裝配等知識點,希望大家能從中有所收獲!

 [[281868]]

一 為什么需要服務日志熱更新?

對于后端老鳥來說,一定遇到過這樣的場景:

為了排查線上突發的問題,非常希望能夠全面的看到請求在服務鏈路上的完整日志輸出;

But,在生產環境中,為了避免日志打印過量造成磁盤空間浪費,通常會將日志級別設定在INFO,并關閉一般情況用不到的日志輸出;

在不重啟服務的情況下,開啟本已經關閉的業務日志輸出,能不能搞的定呢?答案是當然沒問題。

二 需求分析

熟悉logback的同學此時肯定已經想到通過掃描監聽logback.xml文件配置變化來實現日志級別的調整,像如下這種方式:

  1. <configuration debug="true" scan="true" scanPeriod="1 seconds"

但通常情況下,你的業務服務是分布式部署的,后端節點有多臺,如果一臺臺的去改,且不說運維大哥未必就會同意給你生產機器文件的修改權限,即使可以,這么做未免有些過于“老實”了;有沒有一種可以集中管理日志配置,修改文件后再逐個分發給各節點的解決方案呢?沿著這個思路,自然而然就會聯想到配置中心,這里,我主要介紹攜程開源的apollo,同類的配置中心產品還有百度Disconf、阿里ACM和Spring Cloud Config,感興趣的自行研究。

三 做實驗

熟悉apollo文件管理的同學都知道,apollo通過推拉結合的方式將服務端存儲的應用配置文件緩存到本地是以properties的格式存儲的,如下面所示:

demo+dev+logback.xml.properties

  1. content=<?xml version\="1.0" encoding\="UTF-8"?>\n<configuration debug\="true">\n\t<property name\="encoding" value\="UTF-8"/>\n\n\t<appender name\="STDOUT" class\="ch.qos.logback.core.ConsoleAppender">\n\t\t<encoder class\="ch.qos.logback.classic.encoder.PatternLayoutEncoder">\n\t\t\t<pattern>%d{yyyy-MM-dd HH\:mm\:ss.SSS}|%X{requestId}|[%t] %-5level %logger{50} %line - %m%n</pattern>\n\t\t</encoder>\n\t</appender>\n\n\t<appender name\="FILE" class\="ch.qos.logback.core.rolling.RollingFileAppender">\n\t\t<file>logs/brm.log</file>\n\t\t<encoder class\="ch.qos.logback.classic.encoder.PatternLayoutEncoder">\n\t\t\t<pattern>%d{yyyy-MM-dd HH\:mm\:ss.SSS}|%X{requestId}|%X{requestSeq}|[%t] %-5level %logger{50} %line - %m%n</pattern>\n\t\t</encoder>\n\t\t<rollingPolicy class\="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">\n\t\t\t<fileNamePattern>logs/brm-%d{yyyy-MM-dd-HH}-%i.log</fileNamePattern>>\n\t\t\t<\!--單個文件切割閾值,超過生成新log文件-->\n\t\t\t<maxFileSize>200MB</maxFileSize>\n\t\t\t<\!--最大保留天數-->\n\t\t\t<maxHistory>336</maxHistory>\n\t\t</rollingPolicy>\n\t</appender>\n\n    <\!--log4jdbc -->\n    <logger name\="jdbc.sqltiming" level\="INFO"/>\n    <logger name\="jdbc.sqlonly" level\="OFF"/>\n    <logger name\="jdbc.audit" level\="OFF"/>\n    <logger name\="jdbc.resultset" level\="OFF"/>\n    <logger name\="jdbc.resultsettable" level\="OFF"/>\n    <logger name\="jdbc.connection" level\="OFF"/>\n        \n\t<root level\="INFO">\n\t\t<appender-ref ref\="STDOUT"/>\n\t\t<appender-ref ref\="FILE"/>\n\t</root>\n</configuration> 

HH\:mm\:ss.SSS}|%X{requestId}|%X{requestSeq}|[%t] %-5level %logger{50} %line - %m%n \n\t\t\n\t\t\n\t\t\tlogs/brm-%d{yyyy-MM-dd-HH}-%i.log>\n\t\t\t<\!--單個文件切割閾值,超過生成新log文件-->\n\t\t\t200MB\n\t\t\t<\!--最大保留天數-->\n\t\t\t336\n\t\t\n\t\n\n <\!--log4jdbc -->\n \n \n \n \n \n \n \n\t\n\t\t\n\t\t\n\t\n

而我們通常在配置logback的時候使用的是xml文件;

因此,我們要想辦法讓logback能夠加載context的內存值信息。

閱讀logback資料發現,JoranConfigurator支持我們以自定義的方式配置logback,

而springboot是通過LoggingSystem來加載管理日志系統的;如果我能在springboot啟動的時候指定我自定義的日志加載類,問題便迎刃而解。

這里,我們在resources目錄下新建META-INF文件夾,添加spring.factories,內容如下:

  1. org.springframework.context.ApplicationContextInitializer = com.zhoupu.zplog.refresher.LoggerRefresher 
  2. org.springframework.boot.env.EnvironmentPostProcessor = com.zhoupu.zplog.refresher.LoggerRefresher 

這里我們定義一個LoggerRefresher,該類重寫loadDefaults和loadConfiguration方法,通過JoranConfigurator加載logback配置,并在configureByApollo中添加一個apollo事件監聽器,當發現logback.xml文件有變化時,重新執行configureByApollo方法刷新日志配置。

核心代碼部分如下:

  1. package com.zhoupu.zplog.refresher; 
  2.  
  3. import ch.qos.logback.classic.LoggerContext; 
  4. import ch.qos.logback.classic.joran.JoranConfigurator; 
  5. import ch.qos.logback.core.joran.spi.JoranException; 
  6. import com.ctrip.framework.apollo.Config; 
  7. import com.ctrip.framework.apollo.ConfigChangeListener; 
  8. import com.ctrip.framework.apollo.ConfigService; 
  9. import com.ctrip.framework.apollo.model.ConfigChangeEvent; 
  10. import com.ctrip.framework.apollo.spring.config.PropertySourcesConstants; 
  11. import org.slf4j.ILoggerFactory; 
  12. import org.slf4j.Logger; 
  13. import org.slf4j.LoggerFactory; 
  14. import org.springframework.boot.SpringApplication; 
  15. import org.springframework.boot.env.EnvironmentPostProcessor; 
  16. import org.springframework.context.ApplicationContextInitializer; 
  17. import org.springframework.context.ConfigurableApplicationContext; 
  18. import org.springframework.core.Ordered; 
  19. import org.springframework.core.env.ConfigurableEnvironment; 
  20. import org.springframework.util.StringUtils; 
  21.  
  22. import javax.xml.parsers.DocumentBuilder; 
  23. import javax.xml.parsers.DocumentBuilderFactory; 
  24. import java.io.ByteArrayInputStream; 
  25. import java.io.UnsupportedEncodingException; 
  26.  
  27. /** 
  28.  * 
  29.  * @author vigor 
  30.  * @date 2019/6/14 上午11:27 
  31.  */ 
  32.  
  33. public class LoggerRefresher implements ApplicationContextInitializer<ConfigurableApplicationContext>, EnvironmentPostProcessor, Ordered { 
  34.     private static final Logger log = LoggerFactory.getLogger(LoggerRefresher.class); 
  35.  
  36.     private boolean loadFlag = false
  37.  
  38.     @Override 
  39.     public void initialize(ConfigurableApplicationContext context) { 
  40.         ConfigurableEnvironment environment = context.getEnvironment(); 
  41.         load(environment); 
  42.  
  43.     } 
  44.  
  45.     @Override 
  46.     public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { 
  47.         load(environment); 
  48.     } 
  49.  
  50.     @Override 
  51.     public int getOrder() { 
  52.         return 1; 
  53.     } 
  54.  
  55.     private void load(ConfigurableEnvironment environment) { 
  56.         if (!loadFlag) { 
  57.             environment.getPropertySources().forEach(ps -> { 
  58.                 if (PropertySourcesConstants.APOLLO_BOOTSTRAP_PROPERTY_SOURCE_NAME.equals(ps.getName())) { 
  59.                     configureByApollo(); 
  60.                     loadFlag = true
  61.                 } 
  62.             }); 
  63.         } 
  64.     } 
  65.  
  66.     private void configureByApollo() { 
  67.         Config config = ConfigService.getConfig("logback.xml"); 
  68.  
  69.         String content = config.getProperty("content"""); 
  70.         if (StringUtils.isEmpty(content) || !validateXML(content)) { 
  71.             return
  72.         } 
  73.  
  74.         config.addChangeListener(new ConfigChangeListener() { 
  75.             @Override 
  76.             public void onChange(ConfigChangeEvent changeEvent) { 
  77.                 configureByApollo(); 
  78.             } 
  79.  
  80.             @Override 
  81.             public boolean equals(Object obj) { 
  82.                 if (this == obj) { 
  83.                     return true
  84.                 } 
  85.                 if (this.getClass().equals(obj.getClass())) { 
  86.                     return true
  87.                 } 
  88.                 return false
  89.             } 
  90.  
  91.             @Override 
  92.             public int hashCode() { 
  93.                 return 1; 
  94.             } 
  95.         }); 
  96.  
  97.         ILoggerFactory loggerFactory = LoggerFactory.getILoggerFactory(); 
  98.         LoggerContext loggerContext = (LoggerContext) loggerFactory; 
  99.         loggerContext.reset(); 
  100.         JoranConfigurator configurator = new JoranConfigurator(); 
  101.         configurator.setContext(loggerContext); 
  102.         try { 
  103.             configurator.doConfigure(new ByteArrayInputStream(content.getBytes("utf-8"))); 
  104.             log.warn("*****************************logback configureByApollo success!********************************"); 
  105.         } catch (JoranException e) { 
  106.             e.printStackTrace(); 
  107.         } catch (UnsupportedEncodingException e) { 
  108.             e.printStackTrace(); 
  109.         } 
  110.     } 
  111.  
  112.     private boolean validateXML(String xml){ 
  113.         boolean isValidated = true
  114.         try { 
  115.             DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
  116.             DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder(); 
  117.             builder.parse(new ByteArrayInputStream(xml.getBytes("utf-8"))); 
  118.         } catch (Exception e) { 
  119.             log.error("apollo logback config error = {}", e); 
  120.             isValidated = false
  121.         } 
  122.         return isValidated; 
  123.     } 
  124.  

至此已完成所有準備工作,運行demo程序,我的項目使用log4jdbc輸出sql,這里我通過修改apollo配置管理后臺jdbc日志配置,將sqltiming級別改為INFO:

  1. <!--log4jdbc --> 
  2.     <logger name="jdbc.sqltiming" level="INFO"/> 
  3.     <logger name="jdbc.sqlonly" level="OFF"/> 
  4.     <logger name="jdbc.audit" level="OFF"/> 
  5.     <logger name="jdbc.resultset" level="OFF"/> 
  6.     <logger name="jdbc.resultsettable" level="OFF"/> 
  7.     <logger name="jdbc.connection" level="OFF"/> 

發起一個后端請求,查看控制臺日志輸出,有了!

  1. 2019-11-08 10:11:27.794|1fe97e7dcfeb4fc2810d8a7a706fad2a||[http-nio-8062-exec-3] INFO  jdbc.sqltiming 357 - SELECT id, row_state, created_at, updated_at, created_by, updated_by, business_id, contact_name, 
  2. role, mobile, contact_type FROM t_business_contact WHERE row_state = 0 AND business_id = 1000006 

驚不驚喜_,意不意外!

四 總結

一個簡單的日志配置熱更新嘗試,串聯起了logback的自定義配置加載原理,apollo的配置中心使用方法和事件監聽機制,以及springboot日志管理和自動裝配等知識點,希望大家能從中有所收獲!

【本文是51CTO專欄機構“舟譜數據”的原創文章,微信公眾號“舟譜數據( id: zhoupudata)”】

戳這里,看該作者更多好文

 

責任編輯:武曉燕 來源: 51CTO
相關推薦

2017-03-09 18:51:53

2025-02-10 00:14:00

2024-04-18 15:22:54

2022-01-05 10:28:11

前端開發技術

2023-07-31 09:59:17

JavaJVMAgent

2025-07-30 07:34:58

2009-05-12 17:54:44

LinuxOS更新MIT

2022-02-14 11:14:34

Java工程師開發

2021-07-27 22:30:15

Windows 11Windows微軟

2024-06-17 08:22:31

GenAI技術人工智能

2010-01-14 17:25:28

配置交換機堆疊

2012-01-13 15:48:21

IT技術人員

2018-10-17 10:49:49

Kubernetes存儲處理

2020-06-02 16:33:52

Serverless 云函數Node

2015-07-13 10:00:25

Android開發工具

2011-11-09 13:06:48

OpenFlow

2013-09-16 14:23:19

2025-01-21 11:46:26

2014-11-05 10:55:48

云計算云技術

2016-10-28 10:40:12

點贊
收藏

51CTO技術棧公眾號

欧美性猛交xxx乱大交3蜜桃| 天天操天天爽天天干| 美女视频一区| 亚洲免费看黄网站| 国产日产精品一区二区三区四区| 久久国产精品免费看| 精品国产乱码| 日韩一本二本av| 干日本少妇首页| 秋霞a级毛片在线看| 成人一区在线看| 国产精品96久久久久久又黄又硬| 91插插插插插插| 牛牛影视一区二区三区免费看| 色婷婷av久久久久久久| 国产成年人在线观看| 天天爱天天干天天操| 日本不卡123| 久久久久久av| avhd101老司机| 99ri日韩精品视频| 欧美三级在线播放| 日韩av高清在线看片| 在线免费av电影| 不卡的av网站| 亚洲v日韩v综合v精品v| av中文在线播放| 欧美精品国产| 视频一区视频二区国产精品 | 中文在线观看免费| 久久综合网色—综合色88| 成人免费网站在线| 波多野结衣小视频| 亚洲理伦在线| 欧美另类极品videosbest最新版本| 白白色免费视频| 成人性生交大片免费看96| 欧美美女一区二区三区| 色诱视频在线观看| 国产色播av在线| 一个色综合av| 国产免费色视频| 成年人视频在线看| 91麻豆123| 国内精品国语自产拍在线观看| 99国产在线播放| 九九国产精品视频| 国产日产欧美精品| 中文字幕在线视频第一页| 亚洲一区图片| 国模吧一区二区| 久久国产精品波多野结衣| 亚洲大全视频| 久久天天躁狠狠躁夜夜爽蜜月| 国产视频不卡在线| 国产亚洲一卡2卡3卡4卡新区| 亚洲精品99久久久久中文字幕| 日本中文字幕有码| 亚洲不卡视频| 日韩精品一区二区三区视频播放| 国产精品嫩草影院8vv8| 久久亚洲精品中文字幕| 欧美三级电影在线观看| 日韩爱爱小视频| 六九午夜精品视频| 3d成人动漫网站| 亚洲精品免费一区亚洲精品免费精品一区| 99久久er| 欧美精品乱码久久久久久按摩 | 久久精品五月婷婷| 污污的视频网站在线观看| 99久久精品国产毛片| 精品蜜桃一区二区三区| 日本国产在线| 国产亚洲精品7777| 中文字幕中文字幕99| 成人在线免费看片| 亚洲一区二区三区四区在线观看| 黄色三级中文字幕| 蜜臀久久精品| 色天天综合久久久久综合片| 九九热精品在线播放| 高清久久精品| 精品国产在天天线2019| 800av在线播放| 欧美一二区在线观看| 日日摸夜夜添一区| 久久精品欧美一区二区| 亚洲女人av| 国产在线视频91| 高清毛片aaaaaaaaa片| 91一区二区在线| 图片区小说区区亚洲五月| 国产一区久久精品| 亚洲女女做受ⅹxx高潮| 99视频在线免费播放| 成人免费一区| 欧美精品一区二区蜜臀亚洲| 中文字幕在线观看免费高清| 亚洲精品网址| 欧美一级淫片videoshd| 国产精品视频在线观看免费| 成人黄色小视频在线观看| 国产精品国产馆在线真实露脸| 亚洲精品成人久久| 蜜桃传媒一区二区亚洲| 亚洲成人tv| 欧美亚洲国产视频| 国产精品伊人久久 | 国产原创欧美精品| 婷婷五月综合激情| 国产精品久久777777| 99久久国产综合精品五月天喷水| julia一区二区三区中文字幕| 欧美成人乱码一区二区三区| 午夜时刻免费入口| 好看的日韩av电影| 国产精品影院在线观看| 午夜在线视频观看| 亚洲精品视频在线观看免费| 不卡av免费在线| 在线播放一区二区精品视频| 在线观看成人黄色| 97免费在线观看视频| 国产精品一区二区久久不卡| 日韩欧美亚洲v片| 大黄网站在线观看| 欧美日韩在线播放三区四区| 国产亚洲色婷婷久久99精品91| 亚洲国产精品日韩专区av有中文| 欧洲成人在线观看| 五月婷中文字幕| 一区二区三区在线视频播放| 在线观看免费黄网站| 亚洲精品进入| 国内成人精品一区| 国产成人精品毛片| 亚洲欧美综合网| 中文字幕第38页| 欧洲grand老妇人| 91精品国产高清自在线看超| 亚洲经典一区二区| 亚洲欧美乱综合| 日韩在线不卡一区| 成人羞羞在线观看网站| 日本精品视频在线播放| 亚洲色大成网站www| 亚洲韩国一区二区三区| 可以看的av网址| 中文字幕一区二区三区在线视频 | 国产原创视频在线| 成人av网站免费观看| 成人黄色片免费| 青青在线精品| 日韩有码片在线观看| 在线观看免费高清视频| 中文字幕av在线一区二区三区| 欧美成人黑人猛交| 精品国产乱码久久久久久果冻传媒| 国产91成人video| 美州a亚洲一视本频v色道| 欧美视频裸体精品| 在线观看国产精品一区| 久久一区国产| 亚洲a∨一区二区三区| 久久er热在这里只有精品66| 色琪琪综合男人的天堂aⅴ视频| 夜夜爽8888| 亚洲欧美日韩国产手机在线 | 色综合亚洲图丝熟| 亚洲精品一区二区网址| 五月婷婷激情视频| 国产欧美一区视频| 97人人爽人人| 黑丝一区二区| 蜜桃狠狠色伊人亚洲综合网站| 免费看av不卡| 日韩中文在线中文网在线观看 | 亚洲国产成人在线播放| 中日韩黄色大片| 国产亚洲精品资源在线26u| 在线免费观看视频黄| 亚洲一区二区| 国产亚洲情侣一区二区无| 色在线免费观看| 最新的欧美黄色| 国产黄色美女视频| 激情久久av一区av二区av三区| 日本xxxxxxxxx18| 久久国产欧美日韩精品| 久久www视频| 色爱综合av| 国产在线拍偷自揄拍精品| 黄页在线观看免费| 一区二区三区美女xx视频| 国产喷水福利在线视频| 天天色天天操综合| 正在播放国产对白害羞| 成人国产一区二区三区精品| 免费在线观看的av网站| 91精品久久久久久久久久不卡| 国产私拍一区| 六九午夜精品视频| 91国产精品视频在线| 日本在线人成| 亚洲国产精品va在线看黑人动漫| jizz国产在线| 亚洲第一搞黄网站| 欧美风情第一页| 91丨九色丨蝌蚪富婆spa| 欧美一级xxxx| 国产欧美日韩一区二区三区在线| 宅男一区二区三区| 欧美一区 二区| 亚洲精品欧美日韩| 欧美日韩亚洲国产| 午夜免费久久久久| 91最新在线视频| 在线电影欧美日韩一区二区私密| 成人午夜福利视频| 欧美日本视频在线| 亚洲天堂男人av| 亚洲一区二区四区蜜桃| 青青青手机在线视频| 久久蜜桃香蕉精品一区二区三区| 午夜影院免费观看视频| 日韩精品免费专区| 成人一对一视频| 欧美午夜电影在线观看| 一个色的综合| 欧美日韩黑人| 欧美精品一区二区视频 | 蜜乳av另类精品一区二区| 成人免费网站入口| 综合日韩在线| 一区二区精品在线| 日韩成人激情| 欧美日韩一区二区视频在线| 欧美91在线| 国产欧美日韩综合精品二区| 亚洲va欧美va人人爽成人影院| 91精品免费久久久久久久久| 成人a在线观看高清电影| 国内精品久久久久影院 日本资源| 伊人手机在线| 久久国产精品久久久久久| 美女隐私在线观看| xxx欧美精品| 黄色免费在线网站| 不卡av在线网站| 黄网址在线观看| 久久亚洲影音av资源网| 欧美午夜电影一区二区三区| 精品国产依人香蕉在线精品| 日韩毛片久久久| 日韩一区二区欧美| 97超碰在线公开在线看免费| 久久91亚洲精品中文字幕| av网站导航在线观看免费| 久久精品国产亚洲一区二区| 国产色在线观看| 欧美成人性色生活仑片| 最新av在线播放| 欧美富婆性猛交| av今日在线| 奇门遁甲1982国语版免费观看高清 | 中文字幕久久一区| 中文在线播放一区二区| 17c丨国产丨精品视频| 亚洲国产高清一区二区三区| 免费无码毛片一区二三区| 制服诱惑一区二区| 日韩av在线综合| 久热成人在线视频| 久久发布国产伦子伦精品| 成人精品免费看| 久久久这里只有精品视频| 日韩精品人妻中文字幕| 欧美性20hd另类| 中文字幕网址在线| 欧美草草影院在线视频| 天天躁日日躁狠狠躁喷水| 日韩精品一区二区视频| h视频在线免费| 久久国产精彩视频| av男人的天堂在线观看| 国产福利精品视频| 九色精品蝌蚪| 精品一区二区视频| 成人免费a**址| 欧美人与动牲交xxxxbbbb| 亚洲精品三级| 男女啪啪网站视频| 成人久久18免费网站麻豆| 一级性生活毛片| 亚洲人精品午夜| 你懂的国产视频| 欧美精品日韩一区| 日韩二区三区| 久久夜色精品国产欧美乱| 久草在线中文最新视频| 国产一区红桃视频| 日韩a级大片| 欧美精品尤物在线| 影音先锋日韩精品| 国产淫片av片久久久久久| 国产精品系列在线播放| 自拍偷拍视频亚洲| 一区二区三区毛片| 中文区中文字幕免费看| 亚洲精品一区二区精华| 国产高清一区二区三区视频| 奇米4444一区二区三区| 91欧美日韩在线| 亚洲一区二区三区在线观看视频| 99国产精品私拍| 国产永久免费网站| 久久久精品黄色| 日本在线观看视频网站| 欧美精品在欧美一区二区少妇| 天天在线女人的天堂视频| 日韩中文字幕在线看| 625成人欧美午夜电影| 精品亚洲aⅴ在线观看| 在线观看日本中文字幕| 亚洲欧美日韩国产中文在线| 欧美国产一级片| 日韩精品中文字幕在线观看| av观看在线| 国产精品自产拍在线观| 免费观看久久av| 成年人午夜视频在线观看 | 九九热免费在线观看| 久久久无码精品亚洲日韩按摩| 精品午夜福利在线观看| 欧美一级视频精品观看| 免费网站黄在线观看| 国产精品极品美女粉嫩高清在线| 日韩三级毛片| 国产亚洲精品网站| 91天堂素人约啪| 久草手机在线观看| 亚洲国产精品成人一区二区| 欧美性video| 99re6在线| 欧美日韩一区二区高清| www.午夜av| 亚洲婷婷综合色高清在线| 中文字幕在线播出| 最近2019中文字幕mv免费看| 91福利精品在线观看| 欧美污视频久久久| 天堂精品中文字幕在线| 五月婷婷综合在线观看| 欧美午夜女人视频在线| 嫩草在线播放| 国产成人亚洲综合| 成人激情免费视频| 亚洲午夜精品一区| 亚洲免费观看高清完整版在线观看熊| 国产夫妻自拍av| 欧美肥臀大乳一区二区免费视频| 中文字幕一区二区三区四区久久| 日产精品久久久久久久蜜臀| 成人午夜av电影| 国产在线观看黄色| 亚洲日韩第一页| 福利视频亚洲| 精品国产无码在线| 国产美女精品一区二区三区| 91aaa在线观看| 欧美精品一区二区高清在线观看| 丝袜诱惑一区二区| 日韩中文字幕一区| 精品一区二区三区不卡| 免费中文字幕视频| 日韩高清av在线| 国产精品亚洲d| 中文字幕不卡每日更新1区2区| 国产精品亚洲视频| 亚洲男人第一av| 亚洲欧美色婷婷| 美女久久久久久| www.射射射| 国产欧美一区二区三区在线老狼| 国产精品久久久久久久一区二区 | 久操视频在线播放| 97久久夜色精品国产九色 | 高清精品视频| 欧美精品色婷婷五月综合| 国产精品国产自产拍高清av| 亚洲精品综合久久| 国产精品国产自产拍高清av水多| 午夜欧美视频| 中文字幕第4页| 欧美一级片在线看| 亚洲天堂资源| 欧美日韩一区二区三区电影| 91亚洲午夜精品久久久久久| 国产男男gay网站|