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

使用Log4j、ActiveMQ和Spring實現(xiàn)異步日志

開發(fā) 前端
我的團隊和我正在創(chuàng)建一個由一組RESTful JSON服務(wù)組成的服務(wù)平臺,該平臺中的每個服務(wù)在平臺中的作用就是分別提供一些獨特的功能和/或數(shù)據(jù)。由于平臺中產(chǎn)生的日志四散各處,所以我們想,要是能將這些日志集中化處理一下,并提供一個能夠讓我們查看、過濾、排序和搜索我們所有的日志的基本型的日常查看工具就好了。

我的團隊和我正在創(chuàng)建一個由一組RESTful JSON服務(wù)組成的服務(wù)平臺,該平臺中的每個服務(wù)在平臺中的作用就是分別提供一些獨特的功能和/或數(shù)據(jù)。由于平臺中產(chǎn)生的日志四散各處,所以我們想,要是能將這些日志集中化處理一下,并提供一個能夠讓我們查看、過濾、排序和搜索我們所有的日志的基本型的日常查看工具就好了。我們還想讓我們的日志是異步式的,因為我們可不想在寫日志的時候(比方說,可能會將日志直接寫入數(shù)據(jù)庫),讓我們提供的服務(wù)因為寫日志而暫時被阻擋住。

 

實現(xiàn)這個目標(biāo)的策略非常簡單明了。

  1. 安裝ActiveMQ
  2. 創(chuàng)建一個log4j的日志追加器,將日志寫入隊列(log4j自帶了一個這樣的追加器,不過現(xiàn)在讓我們自己來寫一個吧。) 
  3. 寫一個消息偵聽器,從MQ服務(wù)器上所設(shè)置的JMS隊列中讀取日志并將日志持久化

下面讓我們分步來看這個策略是如何得以實現(xiàn)的。

安裝ActiveMQ

安裝一個外部的ActiveMQ服務(wù)器簡單極了。這個鏈接http://servicebus.blogspot.com/2011/02/installing-apache-active-mq-on-ubuntu.html是在Ubuntu上安裝ActiveMQ的一個非常棒的指南。你還可以選擇在你的應(yīng)用中嵌入一個消息代理,采用Spring就可以非常輕松實現(xiàn)。 我們將在后文中詳談具體的實現(xiàn)方法。

創(chuàng)建一個Lo4j的JMS日志追加器

首先,我們來創(chuàng)建一個log4j的JMS日志追加器。log4j自帶了一個這樣的追加器(該追加器沒有將日志寫入一個隊列,而是寫給了一個話題)

  1. import javax.jms.DeliveryMode;  
  2. import javax.jms.Destination;  
  3. import javax.jms.MessageProducer;  
  4. import javax.jms.ObjectMessage;  
  5. import javax.jms.Session;  
  6.  
  7. import org.apache.activemq.ActiveMQConnectionFactory;  
  8. import org.apache.log4j.Appender;  
  9. import org.apache.log4j.AppenderSkeleton;  
  10. import org.apache.log4j.Logger;  
  11. import org.apache.log4j.PatternLayout;  
  12. import org.apache.log4j.spi.LoggingEvent;  
  13.  
  14. /**  
  15.  * JMSQueue appender is a log4j appender that writes LoggingEvent to a queue.  
  16.  * @author faheem  
  17.  *  
  18.  */ 
  19. public class JMSQueueAppender extends AppenderSkeleton implements Appender{  
  20.  
  21. private static Logger logger = Logger.getLogger("JMSQueueAppender");  
  22.  
  23. private String brokerUri;  
  24. private String queueName;  
  25.  
  26. @Override 
  27. public void close() {  
  28.  
  29. }  
  30.  
  31. @Override 
  32. public boolean requiresLayout() {  
  33.     return false;  
  34. }  
  35.  
  36. @Override 
  37. protected synchronized void append(LoggingEvent event) {  
  38.  
  39.    try {  
  40.  
  41.      ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(  
  42.                     this.brokerUri);  
  43.  
  44.      // Create a Connection  
  45.      javax.jms.Connection connection = connectionFactory.createConnection();  
  46.      connection.start();np  
  47.  
  48.      // Create a Session  
  49.      Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);  
  50.  
  51.      // Create the destination (Topic or Queue)  
  52.      Destination destination = session.createQueue(this.queueName);  
  53.  
  54.      // Create a MessageProducer from the Session to the Topic or Queue  
  55.      MessageProducer producer = session.createProducer(destination);  
  56.      producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);  
  57.  
  58.      ObjectMessage message = session.createObjectMessage(new LoggingEventWrapper(event));  
  59.  
  60.      // Tell the producer to send the message  
  61.      producer.send(message);  
  62.  
  63.      // Clean up  
  64.      session.close();  
  65.      connection.close();  
  66.   } catch (Exception e) {  
  67.      e.printStackTrace();  
  68.   }  
  69. }  
  70.  
  71. public void setBrokerUri(String brokerUri) {  
  72.     this.brokerUri = brokerUri;  
  73. }  
  74.  
  75. public String getBrokerUri() {  
  76.     return brokerUri;  
  77. }  
  78.  
  79. public void setQueueName(String queueName) {  
  80.     this.queueName = queueName;  
  81. }  
  82.  
  83. public String getQueueName() {  
  84.     return queueName;  
  85. }  

第37行: log4j將一個LoggingEvent對象作為參數(shù)append方法進行調(diào)用,這個LoggingEvent對象表示了對logger的一次調(diào)用,它封裝了每一個日志項的所有信息。

第41和42行:將指向JMS的uri作為參數(shù),創(chuàng)建一個連接工廠對象,在我們的情況下,該uri指向的是我們的ActiveMQ服務(wù)器。

第45, 46和49行: 我們同JMS服務(wù)器建立一個連接和會話。會話有多種打開模式。在Auto_Acknowledge模式的會話中,消息的應(yīng)答會自動發(fā)生。Client_Acknowledge 模式下,客戶端需要對消息的接收和/或處理進行顯式地應(yīng)答。另外還有兩種其它的模式。有關(guān)細(xì)節(jié),請參考文檔http://download.oracle.com/javaee/1.4/api/javax/jms/Session.html

第52行: 創(chuàng)建一個隊列。將隊列的名字作為參數(shù)發(fā)送給連接

下面讓我們看看這里面發(fā)生了什么事情。

第19行:We我們實現(xiàn)了的Log4J日志追加器接口,該接口要求我們實現(xiàn)三個方法:requiresLayout, closeappend。我們將暫時簡化處理過程,實現(xiàn)所需的append方法。在對logger進行調(diào)用時這個方法就會被調(diào)用。

第56行: 我們將發(fā)送模式設(shè)置為Non_Persistent。另一個可選的模式是Persistent ,在這種模式下,消息會持久化到一個持久性存儲系統(tǒng)中。持久化模式會降低系統(tǒng)速度,但能增加了消息傳遞的可靠性。

第58行: 這行我們做了很多事。首先我將一個LoggingEvent對象封裝到了一個LoggingEventWrapper對象之中。這么做是因為LoggingEvent對象有一些屬性不支持序列化,另外還有一個原因是我想記錄一些額外的信息,比如IP地址和主機名。接下來,使用JMS的會話對象,我們把一個對象(LoggingEventWrapper對象)做好了發(fā)送前的準(zhǔn)備。

第61行: 我將該對象發(fā)送到了隊列中。

下面所示是LoggingEventWrapper的代碼。

  1. import java.io.Serializable;  
  2. import java.net.InetAddress;  
  3. import java.net.UnknownHostException;  
  4.  
  5. import org.apache.log4j.EnhancedPatternLayout;  
  6. import org.apache.log4j.spi.LoggingEvent;  
  7.  
  8. /**  
  9.  * Logging Event Wraps a log4j LoggingEvent object. Wrapping is required by some information is lost  
  10.  * when the LoggingEvent is serialized. The idea is to extract all information required from the LoggingEvent  
  11.  * object, place it in the wrapper and then serialize the LoggingEventWrapper. This way all required data remains  
  12.  * available to us.  
  13.  * @author faheem  
  14.  *  
  15.  */ 
  16.  
  17. public class LoggingEventWrapper implements Serializable{  
  18.  
  19.     private static final String ENHANCED_PATTERN_LAYOUT = "%throwable";  
  20.     private static final long serialVersionUID = 3281981073249085474L;  
  21.     private LoggingEvent loggingEvent;  
  22.  
  23.     private Long timeStamp;  
  24.     private String level;  
  25.     private String logger;  
  26.     private String message;  
  27.     private String detail;  
  28.     private String ipAddress;  
  29.     private String hostName;  
  30.  
  31.     public LoggingEventWrapper(LoggingEvent loggingEvent){  
  32.         this.loggingEvent = loggingEvent;  
  33.  
  34.         //Format event and set detail field  
  35.         EnhancedPatternLayout layout = new EnhancedPatternLayout();  
  36.         layout.setConversionPattern(ENHANCED_PATTERN_LAYOUT);  
  37.         this.detail = layout.format(this.loggingEvent);  
  38.     }  
  39.  
  40.     public Long getTimeStamp() {  
  41.         return this.loggingEvent.timeStamp;  
  42.     }  
  43.  
  44.     public String getLevel() {  
  45.         return this.loggingEvent.getLevel().toString();  
  46.     }  
  47.  
  48.     public String getLogger() {  
  49.         return this.loggingEvent.getLoggerName();  
  50.     }  
  51.  
  52.     public String getMessage() {  
  53.         return this.loggingEvent.getRenderedMessage();  
  54.     }  
  55.  
  56.     public String getDetail() {  
  57.         return this.detail;  
  58.     }  
  59.  
  60.     public LoggingEvent getLoggingEvent() {  
  61.         return loggingEvent;  
  62.     }  
  63.  
  64.     public String getIpAddress() {  
  65.         try {  
  66.             return InetAddress.getLocalHost().getHostAddress();  
  67.         } catch (UnknownHostException e) {  
  68.             return "Could not determine IP";  
  69.         }  
  70.     }  
  71.  
  72.     public String getHostName() {  
  73.         try {  
  74.             return InetAddress.getLocalHost().getHostName();  
  75.         } catch (UnknownHostException e) {  
  76.             return "Could not determine Host Name";  
  77.         }  
  78.     }  

#p#

消息偵聽器

消息偵聽器會對隊列(或話題)進行“偵聽”。一旦有新消息添加到了隊列中,onMessage 方法就會得到調(diào)用。

  1. import javax.jms.JMSException;  
  2. import javax.jms.Message;  
  3. import javax.jms.MessageListener;  
  4. import javax.jms.ObjectMessage;  
  5.  
  6. import org.apache.log4j.Logger;  
  7. import org.springframework.beans.factory.annotation.Autowired;  
  8. import org.springframework.stereotype.Component;  
  9.  
  10. @Component 
  11. public class LogQueueListener implements MessageListener  
  12. {  
  13.     public static Logger logger = Logger.getLogger(LogQueueListener.class);  
  14.  
  15.     @Autowired 
  16.     private ILoggingService loggingService;  
  17.  
  18.     public void onMessage( final Message message )  
  19.     {  
  20.         if ( message instanceof ObjectMessage )  
  21.         {  
  22.             try{  
  23.                 final LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper)((ObjectMessage) message).getObject();  
  24.                 loggingService.saveLog(loggingEventWrapper);  
  25.             }  
  26.             catch (final JMSException e)  
  27.             {  
  28.                 logger.error(e.getMessage(), e);  
  29.             } catch (Exception e) {  
  30.             logger.error(e.getMessage(),e);  
  31.         }  
  32.         }  
  33.     }  

第23行: 檢查從隊列中拿到的對象是否是ObjectMessage的實例

第26行: 從消息中提取出LoggingEventWrapper對象

第27行: 調(diào)用服務(wù)方法將日志持久化

Spring配置

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:jms="http://www.springframework.org/schema/jms" xmlns:amq="http://activemq.apache.org/schema/core" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.0.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core-5.5.0.xsd">  
  3. <!-- lets create an embedded ActiveMQ Broker -->  
  4. <!-- uncomment the tag below only if you need to create an embedded broker -->  
  5. <!-- amq:broker useJmx="false" persistent="false">  
  6.      <amq:transportConnectors>  
  7.      <amq:transportConnector uri="tcp://localhost:61616" />  
  8.      </amq:transportConnectors>  
  9. </amq:broker-->  
  10. <!-- ActiveMQ destinations to use -->  
  11. <amq:queue id="destination" physicalName="logQueue" />  
  12. <!-- JMS ConnectionFactory to use, configuring the embedded broker using XML -->  
  13. <amq:connectionFactory id="jmsFactory" brokerURL="tcp://localhost:61616" />  
  14. <bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">  
  15.    <constructor-arg ref="jmsFactory" />  
  16.    <property name="exceptionListener" ref="JMSExceptionListener" />  
  17.    <property name="sessionCacheSize" value="100" />  
  18. </bean>  
  19. <!-- Spring JMS Template -->  
  20. <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">  
  21.    <constructor-arg ref="connectionFactory" />  
  22. </bean>  
  23. <!-- listener container definition using the jms namespace, concurrency  
  24. is the max number of concurrent listeners that can be started -->  
  25. <jms:listener-container concurrency="10">  
  26.    <jms:listener id="QueueListener" destination="logQueue" ref="logQueueListener" />  
  27. </jms:listener-container>  
  28. </beans> 

第5到9行: 使用代理標(biāo)簽建立一個嵌入式消息代理。既然我用的是外部消息代理,所以我就不需要它了。

第12行: 給出你想要連接的隊列的名字

第14行: 代理服務(wù)器的URI

15到19行: 連接工廠的設(shè)置

26到28行: 消息偵聽器的設(shè)置,這里可以指定用于從隊列中讀取消息的并發(fā)現(xiàn)線程的個數(shù)

當(dāng)然,上面的例子做不到讓你能夠拿來就用。你還需要包含所有的JMS依賴庫并實現(xiàn)完成日志持久化任務(wù)的服務(wù)。但是,我希望本文能夠為你提供一個相當(dāng)不錯的思路。

英文原文:Asynchronous logging using Log4j, ActiveMQ and Spring

譯文鏈接:http://www.oschina.net/translate/asynchronous-logging-using-log4j-activemq-and-spring

責(zé)任編輯:林師授 來源: OSCHINA編譯
相關(guān)推薦

2009-07-08 14:33:46

Java日志框架Log4J

2020-01-07 10:06:26

Slf4jLog4JLogback

2022-03-30 11:29:53

漏洞補丁Spring

2009-06-12 17:03:51

JBoss和log4j

2022-02-15 17:51:38

Log4j漏洞網(wǎng)絡(luò)安全

2022-02-13 16:18:57

JetBrainsIntelliJLog4j

2022-03-25 13:42:15

Log4j漏洞網(wǎng)絡(luò)安全

2021-12-24 09:52:31

Traefik Log4J 漏洞

2021-06-03 10:58:16

logbacklog4jJava

2023-10-07 10:08:54

2021-12-14 23:44:26

漏洞Log4j項目

2016-10-21 13:10:18

javalog4jslf4j

2025-01-14 01:00:00

日志接口Log4j

2020-11-04 12:33:08

Log4j 2日志Logback

2022-01-21 14:22:58

漏洞Log4Shell網(wǎng)絡(luò)犯罪

2022-01-24 10:02:53

漏洞微軟網(wǎng)絡(luò)攻擊

2021-12-13 01:49:34

漏洞Log4j代碼

2021-12-23 09:47:36

Log4jRCE漏洞DoS漏洞

2022-01-10 11:54:54

FTCLog4j聯(lián)邦貿(mào)易委員會

2021-12-23 11:03:25

Log4j 漏洞漏洞
點贊
收藏

51CTO技術(shù)棧公眾號

日本精品久久中文字幕佐佐木| 欧美视频在线一区| 成人免费视频观看视频| 成人短视频在线观看免费| 一级片视频免费| 国产真实久久| 亚洲精品久久7777777| 亚洲午夜精品久久| 国产浮力第一页| 亚洲一区二区成人| 色爱精品视频一区| www.com日本| 天天免费亚洲黑人免费| 综合久久久久久久| 国产一区在线免费观看| 五月天中文字幕| 1024成人| 久久亚洲精品一区二区| 蜜臀av一区二区三区有限公司| 成人在线直播| 99riav一区二区三区| 麻豆成人在线看| 欧美一区二区三区成人精品| 日韩毛片免费看| 精品二区三区线观看| 综合网五月天| 一区二区三区播放| 国产精品人人爽人人做我的可爱| 精品国产欧美成人夜夜嗨| 狠狠人妻久久久久久综合蜜桃| 伊人国产精品| 欧美性极品少妇| 欧美日韩亚洲一| 日本片在线看| 亚洲三级电影网站| 日日骚一区二区网站| 色呦呦中文字幕| 国产精品一区久久久久| 国产精品三级网站| 蜜桃av.com| 免费萌白酱国产一区二区三区| 欧美精品亚洲一区二区在线播放| 日本va中文字幕| 在线观看的黄色| 久久久久久久综合| 国产精品制服诱惑| 午夜老司机福利| 国产美女久久久久| 成人精品视频99在线观看免费| 黄色av一区二区| 久久亚洲国产| 在线电影中文日韩| www色com| 久久福利影院| 色爱av美腿丝袜综合粉嫩av| 亚洲图片第一页| 日产午夜精品一线二线三线| 亚洲性猛交xxxxwww| 白白色免费视频| 久久av中文| 夜夜嗨av色综合久久久综合网| 极品人妻一区二区三区| 欧美**字幕| 一区二区三区四区精品| 美国黄色特级片| 999久久久免费精品国产| 色婷婷av一区二区三区在线观看| 亚洲精品国产精品国自| 五月天激情综合网| 久久国产天堂福利天堂| 欧美人妻精品一区二区免费看| 888久久久| 欧美激情极品视频| 日本网站在线播放| 久久久久久黄| 国产在线久久久| 亚洲av色香蕉一区二区三区| 成人精品在线视频观看| 欧美成ee人免费视频| 成人欧美一区| 亚洲男人都懂的| 日韩av中文字幕第一页| 免费成人动漫| 欧美肥妇毛茸茸| 亚洲一二三四五| 久久av中文| 欧美成人免费小视频| 日韩av在线电影| 日日夜夜免费精品视频| 成人黄色av播放免费| 理论片中文字幕| 亚洲国产高清在线| 国产伦理一区二区三区| 日本在线一二三| 亚洲欧美在线aaa| 欧美一级欧美一级| 欧美日韩国产网站| 日韩午夜激情电影| 亚洲做受高潮无遮挡| 天天av综合| 午夜精品美女自拍福到在线| 91porny九色| 豆国产96在线|亚洲| 国产精品视频99| 亚洲第一页视频| 国产免费成人在线视频| 狠狠精品干练久久久无码中文字幕 | 久久久久中文| 91精品黄色| 精品久久久久一区二区三区| 亚洲婷婷综合久久一本伊一区| 欧美日韩二三区| hd国产人妖ts另类视频| 欧美亚洲国产一区在线观看网站| 无码人妻精品一区二区三| 密臀av在线播放| 欧美亚洲国产怡红院影院| 国产麻豆剧传媒精品国产av| 91亚洲自偷观看高清| 97视频人免费观看| av在线免费在线观看| 国产欧美日韩一区二区三区在线观看 | 精品国产亚洲在线| 成人性色av| 国产视频第一区| 亚洲国产毛片aaaaa无费看 | 国产小视频91| 国产香蕉在线视频| 国产精品一区在线| 亚洲国产精品一区二区第四页av| 国产夫妻在线播放| 亚洲v日本v欧美v久久精品| 性chinese极品按摩| 日韩有码中文字幕在线| 欧美福利视频在线观看| 97国产成人无码精品久久久| 国产欧美日韩精品在线| 丰满少妇久久久| 亚洲日本视频在线| 久久手机精品视频| 国产精品久久无码一三区| 国产欧美1区2区3区| 日本精品www| 婷婷成人影院| 欧洲永久精品大片ww免费漫画| 亚洲男女视频在线观看| 一区二区三区美女| 欧美性受xxxx黒人xyx性爽| 国产精品福利在线观看播放| 国产精品爽黄69| 调教视频免费在线观看| 欧美日韩一级二级| 亚洲成人福利视频| 国产欧美啪啪| 久久99精品久久久久久噜噜| 日韩精品在线免费看| 国产成人av电影在线| www.亚洲成人网| silk一区二区三区精品视频| 欧美国产日韩一区二区在线观看| 亚洲AV无码一区二区三区少妇| 亚洲黄色av一区| 国产吃瓜黑料一区二区| 一区在线免费| 国产精品自拍网| 五月香视频在线观看| 欧美一二三区精品| 日本a在线观看| 91理论电影在线观看| 国产麻花豆剧传媒精品mv在线| 亚洲最好看的视频| 国产精品mp4| 麻豆网站在线免费观看| 日韩欧美一卡二卡| 圆产精品久久久久久久久久久| 97久久超碰精品国产| 欧美成人黑人猛交| 亚洲精品a区| 久久久伊人欧美| 天堂在线视频观看| 色偷偷88欧美精品久久久| www亚洲色图| 国产一区二区三区视频在线播放| 日本中文字幕一级片| 欧美三级午夜理伦三级在线观看 | 日韩黄色在线视频| 久久蜜臀精品av| 一级淫片在线观看| 亚洲三级性片| 国产精品美女主播| 性欧美videoshd高清| 日韩第一页在线| 久草资源在线视频| 久久天天做天天爱综合色| 成人日韩在线视频| 伊人久久成人| 天天好比中文综合网| 在线视频亚洲欧美中文| 日韩av片永久免费网站| 亚洲资源一区| 国产亚洲美女精品久久久| 99热这里是精品| 色激情天天射综合网| 九九视频免费在线观看| 欧美国产精品专区| 中文字幕在线永久| 国产在线不卡一卡二卡三卡四卡| av免费观看大全| 在线精品视频在线观看高清| 欧美精品国产精品久久久| 国产成人免费视频网站视频社区| 91av成人在线| 日本孕妇大胆孕交无码| 日韩中文有码在线视频| 欧洲亚洲精品视频| 精品99999| 国产精品久久免费| 欧美日韩在线播| 福利网址在线观看| 亚洲线精品一区二区三区| 中文字幕在线观看二区| 国产色婷婷亚洲99精品小说| 国产人妻黑人一区二区三区| 国产在线日韩欧美| 爱情岛论坛vip永久入口| 日韩午夜在线| 天堂8在线天堂资源bt| 99久久夜色精品国产亚洲狼 | 国产精品麻豆久久| 台湾成人av| 国产精品三级| 国产精欧美一区二区三区| 91美女主播在线视频| 久久国产天堂福利天堂| 超碰最新在线| 久久亚洲精品网站| 成人黄色网址| 美女999久久久精品视频| 免费成人黄色| 久久久999成人| 好了av在线| 久久高清视频免费| 综合久久2019| 欧美成人一区在线| 美女尤物在线视频| 亚洲色图校园春色| 免费动漫网站在线观看| 欧美日韩精品一区二区| 国产一卡二卡三卡| 欧美亚洲国产一区在线观看网站| 国产99久久久久久免费看| 在线精品视频免费播放| 少妇又紧又色又爽又刺激视频| 色婷婷亚洲精品| 中国a一片一级一片| 欧美日韩色一区| 国产乱子伦精品无码码专区| 91精品欧美福利在线观看| www.久久久久久| 亚洲黄色www| 久久米奇亚洲| 自拍偷拍亚洲一区| 少女频道在线观看免费播放电视剧| 久久午夜a级毛片| 日本中文字幕中出在线| 97成人超碰免| 成人av色网站| 69精品小视频| 亚洲三级欧美| 国产精品在线看| 日韩精品视频一区二区三区| 国产精品国产亚洲精品看不卡15| 久久久伦理片| 五月天久久狠狠| 欧美一区视频| 国产免费黄色av| 青青草成人在线观看| 亚洲天堂一区二区在线观看| 成人av一区二区三区| 97超碰在线资源| 中文字幕色av一区二区三区| 久久久精品人妻一区二区三区四| 精品成人av一区| 在线视频 中文字幕| 精品欧美一区二区在线观看| 青青草在线播放| 久久综合伊人77777蜜臀| h片在线观看视频免费| 国产精品丝袜视频| 99久久香蕉| 亚洲精品国产精品国自产| 欧美日韩亚洲一区二区三区在线| 熟女性饥渴一区二区三区| 国内精品伊人久久久久av一坑| 亚洲激情 欧美| 国产精品久久久久久久裸模 | 国内精品美女在线观看| caopor在线视频| 福利电影一区二区| 青青青手机在线视频| 亚洲成精国产精品女| 亚洲系列第一页| 日韩电影大片中文字幕| caoporn免费在线| 国产成人中文字幕| 久久夜色电影| 国风产精品一区二区| 日韩电影免费在线| 在线免费观看a级片| 亚洲欧美视频在线观看视频| 无码人妻av一区二区三区波多野 | 丝袜在线视频| 国产欧美久久一区二区| 中文字幕中文字幕精品| 妞干网视频在线观看| 精品一区二区在线看| 国产真实乱人偷精品人妻| 亚洲成人午夜影院| 99在线观看免费| 日韩在线免费观看视频| 91精品韩国| 精品中文字幕一区| 狠狠综合久久av一区二区老牛| 国产成年人视频网站| 国产欧美一区二区精品性色超碰| 精品在线视频观看| 日韩三级精品电影久久久| 免费黄网在线观看| 国产精品丝袜白浆摸在线 | 91影院在线免费观看| 久久久久久久久久久网| 欧美一级免费观看| 欧美成人性生活视频| 国产精品一区二区久久精品| 九一国产精品| 国产又大又硬又粗| 97久久超碰国产精品电影| 国产精品theporn动漫| 日韩精品一区二区三区四区视频 | 91精品国产高清久久久久久久久| 亚洲视频一起| 黄色a级片免费看| 成人午夜视频在线观看| 久久久精品视频免费| 亚洲成人久久久| 精精国产xxxx视频在线播放| 久久99九九| 久久狠狠一本精品综合网| 瑟瑟视频在线观看| 色婷婷香蕉在线一区二区| 国产综合在线观看| 国产精品99久久久久久久久| 国产日产精品_国产精品毛片| 日日摸天天爽天天爽视频| 国产日本欧美一区二区| 天天综合久久综合| 日韩在线视频网| 久久99成人| 美女扒开大腿让男人桶| 三级亚洲高清视频| 污片在线免费看| 中文字幕一区日韩精品欧美| 国产精品欧美激情在线| 色综合久久悠悠| 欧美a一欧美| 爱情岛论坛vip永久入口| 亚洲三级在线免费观看| 高h调教冰块play男男双性文| 韩国欧美亚洲国产| 加勒比久久综合| 亚洲在线观看网站| 性久久久久久久久久久久| 国产美女性感在线观看懂色av | 亚洲视频在线观看一区二区| 久久精品亚洲国产| 粉嫩一区二区三区四区公司1| 国产一区二区三区精彩视频 | 成人免费看黄yyy456| 日韩 欧美 综合| 国产一区二区三区视频免费| 成人在线啊v| 波多野结衣家庭教师在线| 国产精品全国免费观看高清| 亚洲av无码乱码国产精品| 国产ts一区二区| 欧美精品成人| 偷拍夫妻性生活| 欧美一区二区福利视频| 中文字幕在线中文字幕在线中三区| 少妇特黄a一区二区三区| 国产成人精品www牛牛影视| 国产三级av片| 久久不射电影网| 国产99久久| 中文字幕在线播放一区二区| 欧美激情综合在线| 高清一区二区三区四区| 国产精品高潮呻吟久久av无限| 欧美三级在线| 正在播放国产对白害羞|