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

C#開發高性能Log Help類設計開發

開發 后端
項目中要在操作數據庫的異常處理中加入寫Log日志,對于商業上有要求,寫log時對其它操作盡可能影響小,不能因為加入log導致耗時太多。在寫入日志時利用Queue來管理,寫日志有一個專門的backgroud線程來處理,如果沒有日志要寫,這個線程處于wait狀態,這就有了線程的異步處理。

概述

項目中要在操作數據庫的異常處理中加入寫Log日志,對于商業上有要求,寫log時對其它操作盡可能影響小,不能因為加入log導致耗時太多。

設計思想

在寫入日志時利用Queue來管理,寫日志有一個專門的backgroud線程來處理,如果沒有日志要寫,這個線程處于wait狀態,這就有了線程的異步處理。

簡單的實現方式

  1. //<summary>  
  2. //Write Log  
  3. //<summary>  
  4. public static void WriteLog(string logFile, string msg)  
  5. {  
  6.     try 
  7.     {  
  8.         System.IO.StreamWriter sw = System.IO.File.AppendText(  
  9.                 logPath + LogFilePrefix +" "+ logFile + " " +  
  10.                 DateTime.Now.ToString("yyyyMMdd") + ".Log" 
  11.             );  
  12.         sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:  ") + msg);  
  13.         sw.Close();  
  14.     }  
  15.     catch (Exception)  
  16.     {  
  17.            
  18.         throw;  
  19.     }  

我們的設計圖

image 

而后我們在AddLogMessage時semaphore.Release()就能喚醒wait中的log 線程。

代碼設計

  1. /// <summary>  
  2. /// Author: spring yang  
  3. /// Create time:2012/3/30  
  4. /// Log Help class  
  5. /// </summary>  
  6. /// <remarks>High performance log class</remarks>  
  7. public class Log : IDisposable  
  8. {  
  9.     //Log Message queue  
  10.     private static Queue<LogMessage> _logMessages;  
  11.  
  12.     //log save directory  
  13.     private static string _logDirectory;  
  14.  
  15.     //log write file state  
  16.     private static bool _state;  
  17.  
  18.     //log type  
  19.     private static LogType _logType;  
  20.  
  21.     //log life time sign  
  22.     private static DateTime _timeSign;  
  23.  
  24.     //log file stream writer  
  25.     private static StreamWriter _writer;  
  26.  
  27.     /// <summary>  
  28.     /// Wait enqueue wirte log message semaphore will release  
  29.     /// </summary>  
  30.     private Semaphore _semaphore;  
  31.  
  32.     /// <summary>  
  33.     /// Single instance  
  34.     /// </summary>  
  35.     private static Log _log;  
  36.  
  37.     /// <summary>  
  38.     /// Gets a single instance  
  39.     /// </summary>  
  40.     public static Log LogInstance  
  41.     {  
  42.         get { return _log ?? (_log = new Log()); }  
  43.     }  
  44.  
  45.     private object _lockObjeck;  
  46.  
  47.     /// <summary>  
  48.     /// Initialize Log instance  
  49.     /// </summary>  
  50.     private void Initialize()  
  51.     {  
  52.         if (_logMessages == null)  
  53.         {   _state = true;  
  54.             string logPath = System.Configuration.ConfigurationManager.AppSettings["LogDirectory"];  
  55.             _logDirectory = string.IsNullOrEmpty(logPath) ? ".\\log\\" : logPath;  
  56.             if (!Directory.Exists(_logDirectory)) Directory.CreateDirectory(_logDirectory);  
  57.             _logType = LogType.Daily;  
  58.             _lockObjeck=new object();  
  59.             _semaphore = new Semaphore(0, int.MaxValue, Constants.LogSemaphoreName);  
  60.             _logMessages = new Queue<LogMessage>();  
  61.             var thread = new Thread(Work) {IsBackground = true};  
  62.             thread.Start();  
  63.         }  
  64.     }  
  65.  
  66.     /// <summary>  
  67.     /// Create a log instance  
  68.     /// </summary>  
  69.     private Log()  
  70.     {  
  71.         Initialize();  
  72.     }  
  73.  
  74.     /// <summary>  
  75.     /// Log save name type,default is daily  
  76.     /// </summary>  
  77.     public LogType LogType  
  78.     {  
  79.         get { return _logType; }  
  80.         set { _logType = value; }  
  81.     }  
  82.  
  83.     /// <summary>  
  84.     /// Write Log file  work method  
  85.     /// </summary>  
  86.     private void Work()  
  87.     {  
  88.         while (true)  
  89.         {  
  90.             //Determine log queue have record need wirte  
  91.             if (_logMessages.Count > 0)  
  92.             {  
  93.                 FileWriteMessage();  
  94.             }  
  95.             else 
  96.                 if (WaitLogMessage()) break;  
  97.         }  
  98.     }  
  99.  
  100.     /// <summary>  
  101.     /// Write message to log file  
  102.     /// </summary>  
  103.     private void FileWriteMessage()  
  104.     {  
  105.         LogMessage logMessage=null;  
  106.         lock (_lockObjeck)  
  107.         {  
  108.             if(_logMessages.Count>0)  
  109.             logMessage = _logMessages.Dequeue();  
  110.         }  
  111.         if (logMessage != null)  
  112.         {  
  113.             FileWrite(logMessage);  
  114.         }  
  115.     }  
  116.  
  117.     /// <summary>  
  118.     /// The thread wait a log message  
  119.     /// </summary>  
  120.     /// <returns>is close or not</returns>  
  121.     private bool WaitLogMessage()  
  122.     {  
  123.         //determine log life time is true or false  
  124.         if (_state)  
  125.         {  
  126.             WaitHandle.WaitAny(new WaitHandle[] { _semaphore }, -1, false);  
  127.             return false;  
  128.         }  
  129.         FileClose();  
  130.         return true;  
  131.     }  
  132.  
  133.     /// <summary>  
  134.     /// Gets file name by log type  
  135.     /// </summary>  
  136.     /// <returns>log file name</returns>  
  137.     private string GetFilename()  
  138.     {  
  139.         DateTime now = DateTime.Now;  
  140.         string format = "";  
  141.         switch (_logType)  
  142.         {  
  143.             case LogType.Daily:  
  144.                 _timeSign = new DateTime(now.Year, now.Month, now.Day);  
  145.                 _timeSign = _timeSign.AddDays(1);  
  146.                 format = "yyyyMMdd'.log'";  
  147.                 break;  
  148.             case LogType.Weekly:  
  149.                 _timeSign = new DateTime(now.Year, now.Month, now.Day);  
  150.                 _timeSign = _timeSign.AddDays(7);  
  151.                 format = "yyyyMMdd'.log'";  
  152.                 break;  
  153.             case LogType.Monthly:  
  154.                 _timeSign = new DateTime(now.Year, now.Month, 1);  
  155.                 _timeSign = _timeSign.AddMonths(1);  
  156.                 format = "yyyyMM'.log'";  
  157.                 break;  
  158.             case LogType.Annually:  
  159.                 _timeSign = new DateTime(now.Year, 1, 1);  
  160.                 _timeSign = _timeSign.AddYears(1);  
  161.                 format = "yyyy'.log'";  
  162.                 break;  
  163.         }  
  164.         return now.ToString(format);  
  165.     }  
  166.  
  167.     /// <summary>  
  168.     /// Write log file message  
  169.     /// </summary>  
  170.     /// <param name="msg"></param>  
  171.     private void FileWrite(LogMessage msg)  
  172.     {  
  173.         try 
  174.         {  
  175.             if (_writer == null)  
  176.             {  
  177.                 FileOpen();  
  178.             }  
  179.             else 
  180.             {  
  181.                 //determine the log file is time sign  
  182.                 if (DateTime.Now >= _timeSign)  
  183.                 {  
  184.                     FileClose();  
  185.                     FileOpen();  
  186.                 }  
  187.                 _writer.WriteLine(Constants.LogMessageTime+msg.Datetime);  
  188.                 _writer.WriteLine(Constants.LogMessageType+msg.Type);  
  189.                 _writer.WriteLine(Constants.LogMessageContent+msg.Text);  
  190.                 _writer.Flush();  
  191.             }  
  192.         }  
  193.         catch (Exception e)  
  194.         {  
  195.             Console.Out.Write(e);  
  196.         }  
  197.     }  
  198.  
  199.     /// <summary>  
  200.     /// Open log file write log message  
  201.     /// </summary>  
  202.     private void FileOpen()  
  203.     {  
  204.         _writer = new StreamWriter(Path.Combine(_logDirectory, GetFilename()), true, Encoding.UTF8);  
  205.     }  
  206.  
  207.     /// <summary>  
  208.     /// Close log file  
  209.     /// </summary>  
  210.     private void FileClose()  
  211.     {  
  212.         if (_writer != null)  
  213.         {  
  214.             _writer.Flush();  
  215.             _writer.Close();  
  216.             _writer.Dispose();  
  217.             _writer = null;  
  218.         }  
  219.     }  
  220.  
  221.     /// <summary>  
  222.     /// Enqueue a new log message and release a semaphore  
  223.     /// </summary>  
  224.     /// <param name="msg">Log message</param>  
  225.     public void Write(LogMessage msg)  
  226.     {  
  227.         if (msg != null)  
  228.         {  
  229.             lock (_lockObjeck)  
  230.             {  
  231.                 _logMessages.Enqueue(msg);  
  232.                 _semaphore.Release();  
  233.             }  
  234.         }  
  235.     }  
  236.  
  237.     /// <summary>  
  238.     /// Write message by message content and type  
  239.     /// </summary>  
  240.     /// <param name="text">log message</param>  
  241.     /// <param name="type">message type</param>  
  242.     public void Write(string text, MessageType type)  
  243.     {  
  244.         Write(new LogMessage(text, type));  
  245.     }  
  246.  
  247.     /// <summary>  
  248.     /// Write Message by datetime and message content and type  
  249.     /// </summary>  
  250.     /// <param name="dateTime">datetime</param>  
  251.     /// <param name="text">message content</param>  
  252.     /// <param name="type">message type</param>  
  253.     public void Write(DateTime dateTime, string text, MessageType type)  
  254.     {  
  255.         Write(new LogMessage(dateTime, text, type));  
  256.     }  
  257.  
  258.     /// <summary>  
  259.     /// Write message ty exception and message type  
  260.     /// </summary>  
  261.     /// <param name="e">exception</param>  
  262.     /// <param name="type">message type</param>  
  263.     public void Write(Exception e, MessageType type)  
  264.     {  
  265.         Write(new LogMessage(e.Message, type));  
  266.     }  
  267.  
  268.     #region IDisposable member  
  269.  
  270.     /// <summary>  
  271.     /// Dispose log  
  272.     /// </summary>  
  273.     public void Dispose()  
  274.     {  
  275.         _state = false;  
  276.     }  
  277.  
  278.     #endregion  
  279. }  
  280.  
  281. /// <summary>  
  282. /// Log Type  
  283. /// </summary>  
  284. /// <remarks>Create log by daily or weekly or monthly or annually</remarks>  
  285. public enum LogType  
  286. {  
  287.     /// <summary>  
  288.     /// Create log by daily  
  289.     /// </summary>  
  290.     Daily,  
  291.  
  292.     /// <summary>  
  293.     /// Create log by weekly  
  294.     /// </summary>  
  295.     Weekly,  
  296.  
  297.     /// <summary>  
  298.     /// Create log by monthly  
  299.     /// </summary>  
  300.     Monthly,  
  301.  
  302.     /// <summary>  
  303.     /// Create log by annually  
  304.     /// </summary>  
  305.     Annually  
  306. }  
  307.  
  308. /// <summary>  
  309. /// Log Message Class  
  310. /// </summary>  
  311. public class LogMessage  
  312. {  
  313.  
  314.     /// <summary>  
  315.     /// Create Log message instance  
  316.     /// </summary>  
  317.     public LogMessage()  
  318.         : this("", MessageType.Unknown)  
  319.     {  
  320.     }  
  321.  
  322.     /// <summary>  
  323.     /// Crete log message by message content and message type  
  324.     /// </summary>  
  325.     /// <param name="text">message content</param>  
  326.     /// <param name="messageType">message type</param>  
  327.     public LogMessage(string text, MessageType messageType)  
  328.         : this(DateTime.Now, text, messageType)  
  329.     {  
  330.     }  
  331.  
  332.     /// <summary>  
  333.     /// Create log message by datetime and message content and message type  
  334.     /// </summary>  
  335.     /// <param name="dateTime">date time </param>  
  336.     /// <param name="text">message content</param>  
  337.     /// <param name="messageType">message type</param>  
  338.     public LogMessage(DateTime dateTime, string text, MessageType messageType)  
  339.     {  
  340.         Datetime = dateTime;  
  341.         Type = messageType;  
  342.         Text = text;  
  343.     }  
  344.  
  345.     /// <summary>  
  346.     /// Gets or sets datetime  
  347.     /// </summary>  
  348.     public DateTime Datetime { getset; }  
  349.  
  350.     /// <summary>  
  351.     /// Gets or sets message content  
  352.     /// </summary>  
  353.     public string Text { getset; }  
  354.  
  355.     /// <summary>  
  356.     /// Gets or sets message type  
  357.     /// </summary>  
  358.     public MessageType Type { getset; }  
  359.  
  360.     /// <summary>  
  361.     /// Get Message to string  
  362.     /// </summary>  
  363.     /// <returns></returns>  
  364.     public new string ToString()  
  365.     {  
  366.         return Datetime.ToString(CultureInfo.InvariantCulture) + "\t" + Text + "\n";  
  367.     }  
  368. }  
  369.  
  370. /// <summary>  
  371. /// Log Message Type enum  
  372. /// </summary>  
  373. public enum MessageType  
  374. {  
  375.     /// <summary>  
  376.     /// unknown type  
  377.     /// </summary>  
  378.     Unknown,  
  379.  
  380.     /// <summary>  
  381.     /// information type  
  382.     /// </summary>  
  383.     Information,  
  384.  
  385.     /// <summary>  
  386.     /// warning type  
  387.     /// </summary>  
  388.     Warning,  
  389.  
  390.     /// <summary>  
  391.     /// error type  
  392.     /// </summary>  
  393.     Error,  
  394.  
  395.     /// <summary>  
  396.     /// success type  
  397.     /// </summary>  
  398.     Success  
  399. }  

Test Case:

  1. public static void TestLog()  
  2. {  
  3.     Log.LogInstance.Write(  "Test Message",MessageType.Information);  
  4.     Log.LogInstance.Write("one",MessageType.Error);  
  5.     Log.LogInstance.Write("two", MessageType.Success);  
  6.     Log.LogInstance.Write("three", MessageType.Warning);  

運行結果:

image

接受Mainz的建議,改了部分代碼。

Mainz:http://www.cnblogs.com/Mainz/

原文鏈接:http://www.cnblogs.com/springyangwc/archive/2012/03/30/2425822.html

【編輯推薦】

  1. C#幾個經常犯錯誤匯總
  2. 淺談面向對象程序設計C#中的類
  3. 詳解C#中不同類的類型
  4. 淺談C#中標準Dispose模式的實現
  5. C#選擇正確的集合進行編碼
責任編輯:林師授 來源: spring yang的博客
相關推薦

2013-09-10 16:16:19

移動網站性能優化移動web

2011-06-14 09:27:43

高性能WEB開發

2009-09-07 06:18:57

C#窗體設計器

2011-04-18 10:16:30

WEB高性能

2009-02-27 14:46:09

AjaxGWT開發

2009-08-20 09:30:03

C#開發WinForm

2009-08-20 10:24:52

C#開發WinForm

2009-08-27 16:54:59

C#開發技巧

2013-06-17 15:41:09

Windows PhoWP開發JSON生成C#類

2019-01-02 16:47:46

Golang彈幕

2019-01-02 16:38:37

Golang彈幕

2011-04-19 11:06:03

JavaScriptweb

2010-04-15 16:50:58

Oracle動態SQL

2011-10-18 13:58:32

高性能web

2019-01-02 16:50:30

Golang彈幕

2009-08-24 10:10:09

C#復合控件

2009-08-24 09:55:24

C#集成開發環境

2024-08-13 14:14:55

場景數據庫API

2011-04-07 13:53:25

Web工具

2020-07-16 08:06:53

網關高性能
點贊
收藏

51CTO技術棧公眾號

欧美久久免费观看| 日本在线视频免费| 国产xxxxxx| 台湾佬综合网| 极品尤物av久久免费看| 日韩精品一二三四区| 自拍偷拍亚洲色图欧美| 国产成人无码专区| av综合网页| 国产精品福利一区二区| 国产极品精品在线观看| 一区二区免费在线观看视频| 91国内在线| 美女毛片一区二区三区四区最新中文字幕亚洲 | 又骚又黄的视频| 久久365资源| 一区二区三区免费| 成人福利在线观看| 亚洲精品天堂网| 成人看片网站| 国产精品午夜在线| 国产精品wwwwww| 国产肥白大熟妇bbbb视频| 深夜成人在线| 久久久久久久久97黄色工厂| 日本国产一区二区三区| 国产美女精品久久| 日韩在线免费| 亚洲国产精品久久久男人的天堂 | 99re这里只有精品首页| 欧美精品一区二区三区国产精品| 在线视频日韩欧美| 超碰caoporn久久| 国产精品99久久久久久宅男| 一本大道亚洲视频| 向日葵污视频在线观看| 老司机精品影院| 九九久久精品视频| zzjj国产精品一区二区| 中文字幕无码毛片免费看| 成人免费网址| 国产精品乱人伦中文| 成人国产精品一区| 一级做a爰片久久毛片| 欧美艳星介绍134位艳星| 国产69精品久久久久777| 久久精品成人欧美大片古装| 精品久久久噜噜噜噜久久图片 | 亚洲图片在线综合| 欧洲av无码放荡人妇网站| 欧美孕妇孕交xxⅹ孕妇交| 日韩福利电影在线观看| 久久亚洲精品国产亚洲老地址| 日韩不卡的av| 日韩精品美女| 五月婷婷综合激情| 五月天亚洲综合| 亚洲爆乳无码一区二区三区| 午夜亚洲一区| 精品国模在线视频| 国产白丝一区二区三区 | 噜噜噜在线观看免费视频日韩| 亚洲人成亚洲人成在线观看| 欧美又黄又嫩大片a级| 欧美激情三区| 亚洲国产精品久久艾草纯爱| 成年丰满熟妇午夜免费视频| 日本国产在线| 久久久久久久久久看片| 麻豆成人在线播放| 国产精品女同一区二区| 国产农村妇女精品一二区| 日韩亚洲欧美中文在线| 男人的午夜天堂| 女厕嘘嘘一区二区在线播放| 亚洲天堂网站在线观看视频| 国产精品情侣呻吟对白视频| 国语一区二区三区| 欧美精品99久久久**| 中文av字幕在线观看| 成人爽a毛片免费啪啪| 亚洲激情第一区| 日韩高清国产一区在线观看| 成人久久久精品国产乱码一区二区| 视频一区在线视频| 欧美激情中文网| 久久99久久99精品免费看小说| 日韩理论电影大全| 精品亚洲一区二区| 亚洲图片另类小说| 亚洲一区二区免费在线观看| 欧美无人高清视频在线观看| 成人毛片一区二区| 1024在线播放| 精品国产福利视频| 欧美 亚洲 视频| 日本蜜桃在线观看视频| 色婷婷国产精品久久包臀 | 精品美女久久久| 日韩电影免费观看在线观看| 日本中文字幕有码| 亚洲精品成a人ⅴ香蕉片| 91极品美女在线| 亚洲av无一区二区三区久久| 亚洲8888| 亚洲美女黄色片| 中文在线一区二区三区| 国产精品jk白丝蜜臀av小说| 伊人久久久久久久久久| 欧美片一区二区| 欧美国产91| 久久综合伊人77777尤物| 国产福利拍拍拍| 国产精品亚洲综合色区韩国| 成人黄色免费片| 日本人妖在线| 亚洲综合丁香婷婷六月香| 999在线免费视频| 久久97精品| 欧美xxxx18性欧美| 夜夜爽妓女8888视频免费观看| 久久精品一本| 国产精品一国产精品最新章节| 亚洲精品福利网站| 国产精品视频yy9299一区| av动漫在线看| 欧美精品总汇| 亚洲精品视频在线观看视频| 精品无码久久久久久久| 亚洲巨乳在线| 欧美一区二区三区……| 亚洲影院在线播放| 成人美女视频在线看| 精品久久中出| 电影在线一区| 一区在线播放视频| 可以免费看的黄色网址| av色在线观看| 日本国产一区二区| 先锋资源av在线| 亚洲午夜av| 国产成人拍精品视频午夜网站| 丰满肥臀噗嗤啊x99av| 亚洲精品亚洲人成人网在线播放| 色综合久综合久久综合久鬼88| 欧美人与性禽动交精品| 视频一区二区三区在线看免费看| 久久久不卡影院| av在线观看地址| 在线免费av资源| 欧美日韩免费一区二区三区| 中文字幕亚洲影院| 久久成人国产精品入口| 黄色片视频在线观看| 久久精品国产亚洲a| 91久久精品在线| 亚洲精品喷潮一区二区三区| 国产日韩在线免费观看| 日韩精品免费观看视频| 欧美怡红院视频| 欧美 日本 国产| 欧美h版在线| 久久影院午夜片一区| 国产丝袜在线精品| 久久av一区二区三区亚洲| 激情小视频在线| 狠狠躁天天躁日日躁欧美| aa免费在线观看| 一区二区三区视频免费观看| 日本伊人精品一区二区三区介绍| 亚洲专区在线播放| 中文字幕中文在线不卡住| 日韩成人av免费| 午夜久久tv| 国产在线精品一区二区三区| 欧美人xxx| 欧美性感美女h网站在线观看免费| www.色偷偷.com| 给我免费播放日韩视频| 91chinesevideo永久地址| 国产精品女人久久久| 亚洲美女精品一区| 亚洲精品乱码久久久久久蜜桃欧美| 欧美精品一区二区久久| 国产精品一区二区女厕厕| 日韩精品福利| 欧美日韩中文字幕一区二区| 亚洲调教欧美在线| 久久精品卡一| 手机成人av在线| 日本肉肉一区| 久久中文字幕国产| 天天射天天色天天干| 亚洲精品视频观看| 中文文字幕文字幕高清| 日韩电影在线看| 国产激情片在线观看| 亚洲人成网www| 91热精品视频| 亚洲三级欧美| 久久在线视频在线| 九九九伊在人线综合| 欧美一区二区三区免费视频| 最新日韩免费视频| 国产ts人妖一区二区| 可以免费在线看黄的网站| 伊人色**天天综合婷婷| 国产综合在线观看视频| 国产在线色视频| 日韩区在线观看| www.色小姐com| 国产毛片精品一区| www.亚洲天堂网| 五月激情综合| 成人免费在线视频网站| 色在线中文字幕| 精品视频9999| 丰满岳乱妇国产精品一区| 欧美在线制服丝袜| 纪美影视在线观看电视版使用方法| 国产69精品久久99不卡| 91 在线视频观看| 欧美国产一级| 久久影院理伦片| 日韩在线精品强乱中文字幕| 欧美成aaa人片免费看| 裸体xxxx视频在线| 欧美日韩成人综合在线一区二区| 日本在线小视频| 亚洲理论在线观看| 亚洲色图100p| 国产欧美日韩亚州综合| 91制片厂毛片| 欧美一区精品| 一本色道久久综合亚洲精品婷婷 | 国产精品视频一| 最新97超碰在线| 欧美一区二区三区在线视频| 无码人妻熟妇av又粗又大| 天天综合网 天天综合色| 免费在线一区二区三区| 亚洲美女免费在线| 无码黑人精品一区二区| 福利91精品一区二区三区| 国产精欧美一区二区三区白种人| 久久er精品视频| 国产精品一区二区小说| 免费高清视频精品| 米仓穗香在线观看| 丝袜av一区| 久久av一区二区三区漫画| 欧美一区二区三区红桃小说| 国产精品视频公开费视频| 最新日韩精品| 日韩女优在线播放| 精品成人av| 国产裸体写真av一区二区| 成人黄色毛片| 欧美激情一级欧美精品| 男人添女人下部高潮视频在线观看| 国产婷婷97碰碰久久人人蜜臀| 天天射天天色天天干| 人体久久天天| 久久6免费高清热精品| bestiality新另类大全| 九九热视频这里只有精品| 精品精品导航| **欧美日韩vr在线| 亚洲va中文在线播放免费| 久久精品99国产精品酒店日本 | www.日韩.com| a级影片在线观看| 久久免费视频这里只有精品| 日本欧美在线视频免费观看| 日韩成人小视频| 日韩有码电影| 中文字幕精品网| 手机亚洲第一页| 一区二区三区美女xx视频| 日本欧美在线视频免费观看| 欧美大片在线免费观看| 在线观看爽视频| 成人午夜两性视频| 6080亚洲理论片在线观看| 麻豆91蜜桃| 国产精品成人a在线观看| 久久这里只有精品8| 99久久精品国产亚洲精品| 日本成人在线不卡| 国产精品外国| 国产资源中文字幕| 91热门视频在线观看| 久久久男人的天堂| 久久综合九色综合97婷婷| 成人三级视频在线观看| 亚洲国产wwwccc36天堂| 中文字幕+乱码+中文乱码91| 色哟哟精品一区| 99精品视频免费看| 欧美久久婷婷综合色| 人妻一区二区三区| 日韩欧美一级片| aa视频在线免费观看| 精品视频在线播放免| 成人欧美在线| 国产福利精品在线| 伊人久久噜噜噜躁狠狠躁| 日本一区免费观看| 最新精品国偷自产在线| 91嫩草国产丨精品入口麻豆| 亚久久调教视频| 激情成人在线观看| 中文字幕电影一区| 日韩黄色三级视频| 91精品国产综合久久久蜜臀图片| 亚洲性猛交富婆| 精品国产成人在线影院| 懂色av一区二区三区四区| 中文字幕亚洲二区| 中文字幕在线看片| 成人动漫视频在线观看完整版 | 成人涩涩小片视频日本| 欧美性猛交99久久久久99按摩| 精品国产伦一区二区三区| 日韩美女主播在线视频一区二区三区| 国产精品麻豆一区二区三区| 97精品国产97久久久久久| 亚洲校园激情春色| 国产91免费视频| 欧美网色网址| 成品人视频ww入口| 国产精品自在欧美一区| jizzjizz日本少妇| 欧美中文字幕久久| 免费人成在线观看网站| 91高清视频在线免费观看| 18国产精品| 97碰在线视频| 国产成人综合自拍| 中文字幕av久久爽av| 91麻豆精品国产自产在线观看一区| 国产黄色片在线播放| 国产精品国内视频| 国产一区二区三区探花| 国产999在线| 免费av一区| 日韩中文字幕三区| 久久精品国产免费| 国产黄色录像视频| 欧美伊人久久久久久午夜久久久久| 久久久资源网| 国产精品欧美亚洲777777| av资源久久| wwwwwxxxx日本| 国产精品久久久久久福利一牛影视 | 香蕉成人伊视频在线观看| 黑人乱码一区二区三区av| 久久久久久久亚洲精品| 红杏aⅴ成人免费视频| 国产黄视频在线| 久久久精品日韩欧美| 成人一二三四区| 日韩最新av在线| 综合伊人久久| 日本网站免费在线观看| 久久久青草青青国产亚洲免观| 亚洲欧美日韩一区二区三区四区| 在线观看欧美成人| 不卡精品视频| 久久精品人人做人人爽电影| 老鸭窝91久久精品色噜噜导演| 无码少妇一区二区| 国产成人免费9x9x人网站视频 | 初高中福利视频网站| 亚洲一二三四区| 国产亚洲久一区二区| 中文字幕日韩av综合精品| 国产成人视屏| 色999日韩自偷自拍美女| 久久99久久99| 久久精品久久精品久久| 在线成人高清不卡| 91网址在线观看| 久久久免费看| 精品亚洲成a人| 国产在线观看99| 国产香蕉精品视频一区二区三区| 欧美成人aaa| 国产不卡一区二区视频| 国产一区二区视频在线播放| 欧美a在线播放| 日韩欧美不卡在线观看视频| 午夜伦理福利在线| 欧美日韩亚洲国产成人| 99r国产精品| 国产www视频| 国产精品第一第二| 狠狠88综合久久久久综合网| 91激情视频在线观看| 日韩欧美精品在线|