日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.Net Core中的诊断日志DiagnosticSource讲解

發布時間:2023/12/4 asp.net 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .Net Core中的诊断日志DiagnosticSource讲解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

????近期由于需要進行分布式鏈路跟蹤系統的技術選型,所以一直在研究鏈路跟蹤相關的框架。作為能在.Net Core中使用的APM,SkyWalking自然成為了首選。SkyAPM-dotnet是SkyWalking在.Net Core端的探針實現,其主要的收集日志的手段就是基于DiagnosticSource來進行診斷跟蹤的。不得不說SkyAPM-dotnet的設計還是非常優秀的,它本身定義了一套非常規范的標準,而且提供了非常良好的擴展性,雖然框架本身可支持的采集端有限,但是基于這套標準擴展起來還是非常方便的。

概念介紹

????關于DiagnosticSource它本身是一個基于發布訂閱模式的工作模式,由于它本身的實現方式是異步的,所以不僅僅可以把它用到日志上,還可以用它實現異步操作,或者用它簡化實現發布訂閱的功能。DiagnosticSource本身是一個抽象類,我們最常用到的是它的子類DiagnosticListener,通過DiagnosticSource的Write方法實現發布一條有具體名稱的消息,然后通過IObserver去訂閱消息。DiagnosticListener可以實現不同的實例,每個實例可以有自己的名稱,每個實例還可以發布不同名稱的消息,好比一個在寫代碼的時候我們可以定義多個程序集,一個程序集下面可以包含多個命名空間。

使用方式

上面我們大致的介紹了關于DiagnosticSource相關的概念,相信大家已經有了初步的了解,接下來我們就來看一下在代碼中如何使用DiagnosticSource,還說到了它一個重要的子類DiagnosticListener,基本上關于DiagnosticSource的工作方式都是圍繞著DiagnosticListener實現的,首先我們來看一下如何發布一條消息

//聲明DiagnosticListener并命名為MyTest DiagnosticSource diagnosticSource = new DiagnosticListener("MyTest"); string pubName = "MyTest.Log"; //判斷是否存在MyTest.Log的訂閱者 if (diagnosticSource.IsEnabled(pubName)) {//發送名為MyTest.Log的消息,包含Name,Address兩個屬性diagnosticSource.Write(pubName, new { Name = "old王", Address="隔壁" }); }

通過這種方式,我們就可以完成針對消息的發布,其中用到了IsEnabled方法,這個方法是在實際使用DiagnosticSource過程中比較常用的方法,用于判斷是夠存在對應名稱的消費者,這樣可以有效的避免發送消息浪費。
發送相對還是比較簡單的,接下來我們看一下如何訂閱發布的消息。上面我們提到了訂閱消息是通過IObserver接口實現的,IObserver代表了訂閱者。雖然我們通過DiagnosticSource去發布消息,但是真正描述發布者身份的是IObservable接口,IObservable的唯一方法Subscribe是用來注冊訂閱者IObserver,但是默認系統并沒有為我們提供一個具體的實現類,所以我們需要定義一個IObserver訂閱者的實現類

public class MyObserver<T>:IObserver<T> {private Action<T> _next;public MyObserver(Action<T> next) {_next = next;}public void OnCompleted() {}public void OnError(Exception error) {}public void OnNext(T value) => _next(value); }

有了具體的訂閱者實現類,我們就可以為發布者注冊訂閱者了,同樣是使用DiagnosticListener,個人認為雖然操作都是通過DiagnosticSource來完成的,但它只是一個外觀類,但是并不能直接描述發布者和訂閱者本身。接下來我們看一下具體實現

//AllListeners獲取所有發布者,Subscribe為發布者注冊訂閱者MyObserver DiagnosticListener.AllListeners.Subscribe(new MyObserver<DiagnosticListener>(listener => {//判斷發布者的名字if (listener.Name == "MyTest"){//獲取訂閱信息listener.Subscribe(new MyObserver<KeyValuePair<string, object>>(listenerData =>{System.Console.WriteLine($"監聽名稱:{listenerData.Key}");dynamic data = listenerData.Value;//打印發布的消息System.Console.WriteLine($"獲取的信息為:{data.Name}的地址是{data.Address}");}));listener.SubscribeWithAdapter(new MyDiagnosticListener());} }));

具體實現可總結為兩步,首先為發布者注冊訂閱者,然后獲取訂閱者獲取發布的消息。這種寫法還是比較復雜的,首先需要實現訂閱者類,然后通過一系列復雜的操作,才能完成消息訂閱,然后還要自己獲取發布的消息,解析具體的消息值,總之操作流程非常繁瑣。微軟似乎也意識到了這個問題,于是乎給我提供了一個關于實現訂閱者的便利方法,編輯項目文件引入DiagnosticAdapter包

<PackageReference Include="Microsoft.Extensions.DiagnosticAdapter" Version="3.1.7" />

或者通過包管理器直接搜索安裝,道路千萬條都是通羅馬。通過這個包解決了我們兩個痛點,首先是關于訂閱者的注冊難問題,其次解決了關于發布消息解析難的痛點。我們可以直接訂閱一個適配類來充當訂閱者的載體,其次我們可以定義方法模擬訂閱去訂閱消息,而這個方法的參數就是我們發布的消息內容。說了這么多,不如直接上代碼

public class MyDiagnosticListener {//發布的消息主題名稱[DiagnosticName("MyTest.Log")]//發布的消息參數名稱和發布的屬性名稱要一致public void MyLog(string name,string address){System.Console.WriteLine($"監聽名稱:MyTest.Log");System.Console.WriteLine($"獲取的信息為:{name}的地址是{address}");} }

我們可以隨便定義一個類來充當訂閱者載體,類里面可以自定義方法來實現獲取解析消息的實現。想要讓方法可以訂閱消息,需要在方法上聲明DiagnosticName,然后名稱就是你要訂閱消息的名稱,而方法的參數就是你發布消息的字段屬性名稱,這里需要注意的是訂閱的參數名稱需要和發布聲明屬性名稱一致。
然后我們直接可以通過這個類去接收訂閱消息

DiagnosticListener.AllListeners.Subscribe(new MyObserver<DiagnosticListener>(listener => {if (listener.Name == "MyTest"){//適配訂閱listener.SubscribeWithAdapter(new MyDiagnosticListener());} }));

可能你覺得這樣還是不夠好,因為還是沒有脫離需要自定義訂閱者,這里還有更簡潔的實現方式。細心的你可能已經發現了SubscribeWithAdapter是DiagnosticListener的擴展方法,而我們聲明DiagnosticSource就是使用的DiagnosticListener實例,所以上面的代碼可以簡化為一下方式

DiagnosticListener diagnosticListener = new DiagnosticListener("MyTest"); DiagnosticSource diagnosticSource = diagnosticListener; //直接去適配訂閱者 diagnosticListener.SubscribeWithAdapter(new MyDiagnosticListener());string pubName = "MyTest.Log"; if (diagnosticSource.IsEnabled(pubName)) {diagnosticSource.Write(pubName, new { Name = "old王", Address="隔壁" }); }

這種方式也是我們比較推薦的使用方式,極大的節省了工作的方式,而且代碼非常的簡潔。但是存在唯一的不足,這種寫法只能針對特定的DiagnosticListener進行訂閱處理,如果你需要監聽所有發布者,就需要使用DiagnosticListener.AllListeners.Subscribe的方式。

DotNetCore源碼中診斷日志的埋點

在.Net Core的源碼中,微軟默認在涉及到網絡請求或處理請求等許多重要的節點都使用了DiagnosticListener來發布攔截的消息,接下來就羅列一些我知道的比較常見的埋點,通過這些操作我們就可以看出,診斷日志還是很便利的,而且微軟在.Net Core中也非常重視它的使用。

在ASP.NET Core中

當我們通過ConfigureWebHostDefaults配置Web主機的時候,程序就已經默認給我們注入了診斷名稱為Microsoft.AspNetCore的DiagnosticListener和DiagnosticSource,這樣我們就可以很方便的在程序中直接獲取DiagnosticListener實例去發布消息或者監聽發布的內部消息,具體注入邏輯位于可以去GenericWebHostBuilder類中查看[點擊查看源碼????]

var listener = new DiagnosticListener("Microsoft.AspNetCore"); services.TryAddSingleton<DiagnosticListener>(listener); services.TryAddSingleton<DiagnosticSource>(listener);

然后在Server啟動的時候傳遞了DiagnosticListener實例[點擊查看源碼????]

var httpApplication = new HostingApplication(application, Logger, DiagnosticListener, HttpContextFactory); await Server.StartAsync(httpApplication, cancellationToken);

這樣在Server運行期間我們可以通過DiagnosticListener診斷跟蹤請求相關的信息,我們可以看下在處理請求的過程中DiagnosticListener都發布了哪些消息,我們找到發送診斷跟蹤的位置位于HostingApplicationDiagnostics中[點擊查看源碼????],這事集中處理請求相關的診斷跟蹤,接下來我們就大致查看一下它發布了哪些事件消息,首先找到定義發布名稱的屬性

private const string ActivityName = "Microsoft.AspNetCore.Hosting.HttpRequestIn"; private const string ActivityStartKey = ActivityName + ".Start"; private const string ActivityStopKey = ActivityName + ".Stop";private const string DeprecatedDiagnosticsBeginRequestKey = "Microsoft.AspNetCore.Hosting.BeginRequest"; private const string DeprecatedDiagnosticsEndRequestKey = "Microsoft.AspNetCore.Hosting.EndRequest"; private const string DiagnosticsUnhandledExceptionKey = "Microsoft.AspNetCore.Hosting.UnhandledException";

通過這些發布消息的名稱我們就可以看出,在請求開始、請求進入、請求結束、請求停止、請求異常等都發布了診斷消息,我們以BeginRequest為例查看一下具體發送的消息

if (_diagnosticListener.IsEnabled(DeprecatedDiagnosticsBeginRequestKey)) {startTimestamp = Stopwatch.GetTimestamp();RecordBeginRequestDiagnostics(httpContext, startTimestamp); }

找到RecordBeginRequestDiagnostics方法的實現

[MethodImpl(MethodImplOptions.NoInlining)] private void RecordBeginRequestDiagnostics(HttpContext httpContext, long startTimestamp) {_diagnosticListener.Write(DeprecatedDiagnosticsBeginRequestKey,new{httpContext = httpContext,timestamp = startTimestamp}); }

從這里我們可以看出在BeginRequest中診斷日志發出的消息中包含了HttpContext和開始時間戳信息,然后再來看一下請求結束發布的診斷消息

[MethodImpl(MethodImplOptions.NoInlining)] private void RecordEndRequestDiagnostics(HttpContext httpContext, long currentTimestamp) {_diagnosticListener.Write(DeprecatedDiagnosticsEndRequestKey,new{httpContext = httpContext,timestamp = currentTimestamp}); }

通過發布的這些跟蹤日志我們可以獲取請求信息,請求時間并且能得到輸出信息和結束時間,有了這些關鍵信息,我們就可以監聽請Asp.Net Core處理請求的情況,我們上面提到過SkyAPM-dotnet正是通過這些發出診斷跟蹤日志,來實現對程序無入侵的方式來處理應用系統監控的,具體我們可以查看相關實現,我們找到訂閱這些消息的地方
[點擊查看源碼????],拿出來類的結構,大致如下

public class HostingTracingDiagnosticProcessor : ITracingDiagnosticProcessor {public string ListenerName { get; } = "Microsoft.AspNetCore";[DiagnosticName("Microsoft.AspNetCore.Hosting.BeginRequest")]public void BeginRequest([Property] HttpContext httpContext){}[DiagnosticName("Microsoft.AspNetCore.Hosting.EndRequest")]public void EndRequest([Property] HttpContext httpContext){}[DiagnosticName("Microsoft.AspNetCore.Diagnostics.UnhandledException")]public void DiagnosticUnhandledException([Property] HttpContext httpContext, [Property] Exception exception){}[DiagnosticName("Microsoft.AspNetCore.Hosting.UnhandledException")]public void HostingUnhandledException([Property] HttpContext httpContext, [Property] Exception exception){}//[DiagnosticName("Microsoft.AspNetCore.Mvc.BeforeAction")]public void BeforeAction([Property] ActionDescriptor actionDescriptor, [Property] HttpContext httpContext){}//[DiagnosticName("Microsoft.AspNetCore.Mvc.AfterAction")]public void AfterAction([Property] ActionDescriptor actionDescriptor, [Property] HttpContext httpContext){} }

不得不承認SkyAPM-dotnet非常巧妙的利用了系統內部發出的診斷跟蹤日志,實現了對請求的處理跟蹤,真的是非常優秀。

在HttpClient中

上面我們看到的是AspNetCore處理請求的診斷日志埋點,在發出請求的HttpClient中,微軟也做了埋點處理。我們在之前的文章.NET Core HttpClient源碼探究中提到過HttpClient通過HttpClientHandler發送請求的,在HttpClientHandler SendAsync方法中我們可以看到如下實現

protected internal override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,CancellationToken cancellationToken) {return DiagnosticsHandler.IsEnabled() && _diagnosticsHandler != null ?_diagnosticsHandler.SendAsync(request, cancellationToken) :_underlyingHandler.SendAsync(request, cancellationToken); }

也就是說如果滿足DiagnosticsHandler.IsEnabled()并且_diagnosticsHandler不為空的情況下將會使用DiagnosticsHandler發送請求,關于DiagnosticsHandler.IsEnabled()的大致實現邏輯如下

if (AppContext.TryGetSwitch("System.Net.Http.EnableActivityPropagation", out bool enableActivityPropagation)) {return enableActivityPropagation; }string? envVar = Environment.GetEnvironmentVariable("DOTNET_SYSTEM_NET_HTTP_ENABLEACTIVITYPROPAGATION"); if (envVar != null && (envVar.Equals("false", StringComparison.OrdinalIgnoreCase) || envVar.Equals("0"))) {return false; } return true;

通過這個邏輯可以看出,默認情況下我們不做特殊處理返回的就是true,也就是說發送請求會通過DiagnosticsHandler,我們找到DiagnosticsHandler的實現[點擊查看源碼????],抽離出來SendAsyncCore方法中關于診斷跟蹤的核心實現邏輯,大致如下

DiagnosticListener diagnosticListener = new DiagnosticListener("HttpHandlerDiagnosticListener"); if (diagnosticListener.IsEnabled("System.Net.Http.Request")) {long timestamp = Stopwatch.GetTimestamp();loggingRequestId = Guid.NewGuid();//請求開始之前發送診斷日志diagnosticListener.Write("System.Net.Http.Request",new RequestData(request, loggingRequestId, timestamp)); } HttpResponseMessage? response = null; TaskStatus taskStatus = TaskStatus.RanToCompletion; try {response = async ?await base.SendAsync(request, cancellationToken).ConfigureAwait(false) :base.Send(request, cancellationToken);return response; } catch (OperationCanceledException) {taskStatus = TaskStatus.Canceled;throw; } catch (Exception ex) {taskStatus = TaskStatus.Faulted;if (diagnosticListener.IsEnabled("System.Net.Http.Exception")){ //如果請求出現異常發出異常消息診斷日志diagnosticListener.Write("System.Net.Http.Exception", new ExceptionData(ex, request));}throw; } finally {if (activity != null){diagnosticListener.StopActivity(activity, new ActivityStopData(response,request,taskStatus));}if (diagnosticListener.IsEnabled("System.Net.Http.Response")){long timestamp = Stopwatch.GetTimestamp();//得到輸出結果后發送診斷日志diagnosticListener.Write("System.Net.Http.Response",new ResponseData(response,loggingRequestId,timestamp,taskStatus));} }

同樣的思路HttpClient會在發送請求之前發出請求信息相關的診斷跟蹤,會在得到相應之后發送響應相關診斷跟蹤,通過這些信息我們可以捕獲到由程序發出的Http請求相關的信息,從而監控請求相關的數據,我們來看一下SkyAPM-dotnet訂閱Http請求相關的實現,在HttpClientTracingDiagnosticProcessor類中[點擊查看源碼????],抽離實現的框架大致如下

public class HttpClientTracingDiagnosticProcessor : ITracingDiagnosticProcessor {public string ListenerName { get; } = "HttpHandlerDiagnosticListener";[DiagnosticName("System.Net.Http.Request")]public void HttpRequest([Property(Name = "Request")] HttpRequestMessage request){}[DiagnosticName("System.Net.Http.Response")]public void HttpResponse([Property(Name = "Response")] HttpResponseMessage response){}[DiagnosticName("System.Net.Http.Exception")]public void HttpException([Property(Name = "Request")] HttpRequestMessage request,[Property(Name = "Exception")] Exception exception){} }

這里正是監聽的HttpClient發出的診斷日志。假如存在系統A和系統B,系統A通過HttpClient發送請求調用Asp.Net Core系統B,通過訂閱他們發出的診斷跟蹤日志,而這些數據正是實現系統監控和鏈路跟蹤重要依據。

其他

????在.Net Core相關的源碼中還有許多其他關于DiagnosticListener的埋點信息比如請求執行到Action的時候或者出現全局異常的時候都有類似的處理。同樣在EFCore中也存在這些埋點信息,有興趣的可以自行查閱相關源碼和SkyAPM-dotnet源碼,了解DiagnosticSource工作方式,以及如何通過這些信息實現APM系統。雖然SkyAPM-dotnet本身實現的框架個數有限,但是它給我們實現了良好的擴展性,我們可以通過DiagnosticSource和DiagnosticListener自行實現SkyAPM-dotnet的擴展,比如你可以擴展Redis MongoDb等其它中間件。比如SkyApm.Diagnostics.CAP是CAP納入SkyAPM中程序包,正是楊總參與了相關代碼的實現。

總結

??? DiagnosticSource診斷跟蹤涉及到的概念雖然不是很多,但是在.Net Core相關的框架中使用的還是非常廣泛的,通過這些信息我們可以拿到框架執行過程中關鍵節點得到的信息,為我們提供了很大的便利。加上SkyAPM-dotnet巧妙的使用了這一特點使得DiagnosticSource更變得強大而且通用。上面我們講述的只是冰山一角,還有更多更深的應用,比如Azure監控.Net Core應用程序也是利用了這些。有興趣的可以查看相關源碼,也可以學習一下SkyAPM-dotnet相關源碼,體會一下DiagnosticSource精髓所在。

????歡迎掃碼關注我的公眾號????

總結

以上是生活随笔為你收集整理的.Net Core中的诊断日志DiagnosticSource讲解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

在线视频欧美精品 | 91在线中文 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产99久久久精品视频 | 99精品在线观看 | 亚洲国产精品成人综合 | 成人黄色小说视频 | 久久免费播放 | 国产手机在线观看视频 | 日韩av免费一区二区 | 国产在线永久 | 日本在线观看中文字幕无线观看 | 三上悠亚一区二区在线观看 | 玖玖在线视频观看 | 娇妻呻吟一区二区三区 | 奇米影视四色8888 | 亚洲精品国产精品国 | 日本视频网 | 在线精品视频免费观看 | 欧洲精品一区二区 | 狠狠色伊人亚洲综合网站野外 | 欧美最新大片在线看 | 亚洲aaa毛片 | 日产中文字幕 | 久久免费国产视频 | 正在播放亚洲精品 | 欧美色伊人 | 在线欧美日韩 | 成人免费在线视频观看 | 亚洲国产精品成人女人久久 | 午夜久久| 91精品秘密在线观看 | 在线观看视频日韩 | 亚洲精品乱码久久久久久蜜桃91 | 亚洲人人爱 | 国产精品麻豆果冻传媒在线播放 | 色婷婷综合久久久久中文字幕1 | 99精品视频观看 | 综合久久久久 | 亚洲国产中文字幕在线 | 综合在线观看色 | 久章操 | 色婷婷伊人| 日本九九视频 | 久久精品日产第一区二区三区乱码 | 亚洲五月六月 | 人人干狠狠干 | 特级片免费看 | 一区二区在线影院 | 91精品爽啪蜜夜国产在线播放 | 亚洲精品国久久99热 | 在线看污网站 | 手机看片 | 国内一级片在线观看 | 美女黄久久 | 96视频免费在线观看 | 亚洲精品乱码久久久久 | 国产精品免费一区二区三区 | 男女全黄一级一级高潮免费看 | 天天添夜夜操 | 超碰公开在线观看 | 99热这里有精品 | 中文字幕五区 | 久久精品视频4 | 中文字幕精品一区二区三区电影 | 国产区精品 | 久久久www成人免费精品 | 狠狠插天天干 | 探花视频免费观看 | 丁香影院在线 | 亚洲综合小说 | 国产精品欧美久久久久无广告 | 国产亚洲视频在线 | 久久久久福利视频 | 亚洲精品国偷拍自产在线观看蜜桃 | 波多在线视频 | 国产成人中文字幕 | 亚洲精品日韩一区二区电影 | 精品免费久久久久久 | 午夜影视一区 | 亚洲高清在线观看视频 | 99精品在线免费观看 | 伊人天天 | 国产高清福利在线 | 久久伊99综合婷婷久久伊 | 久久香蕉一区 | 久久艹综合 | 亚洲成人午夜在线 | 黄色成人av| 日本精品一区二区 | 91精品在线观看入口 | 日韩欧美精品在线观看视频 | 亚洲第一区在线观看 | 不卡的av | 91视频免费网站 | 国产亚洲精品久久久久久电影 | 亚洲在线 | 精品美女久久久久 | 欧美另类成人 | 久久免费视频在线观看 | 国产精品黄网站在线观看 | 日本精品一区二区在线观看 | 天天干天天综合 | 不卡精品 | 国产一区二区不卡视频 | av色综合网 | 在线观看 国产 | 久久免费av | 日韩有码在线播放 | 亚洲在线综合 | 国产视频日韩 | 久久综合给合久久狠狠色 | 在线va视频 | 91一区二区三区久久久久国产乱 | 国产精品h在线观看 | 国产免费黄视频在线观看 | 国产精品青草综合久久久久99 | 射射射av| 久久亚洲综合国产精品99麻豆的功能介绍 | 日韩国产欧美在线播放 | 一二三区av | 久久久久影视 | 天天操夜夜操 | 久久久精品网站 | 日韩在线欧美在线 | 又黄又爽又无遮挡的视频 | 香蕉视频4aa| 香蕉网在线观看 | 精品久久久久久久久久久久 | 欧美在线你懂的 | 激情网站五月天 | 久久99热精品 | 婷色在线 | 亚洲精品美女在线观看播放 | 在线日韩精品视频 | 亚洲视频axxx | 91黄视频在线观看 | 一区 二区 精品 | 偷拍久久久| 久久伊人免费视频 | 四虎影视成人永久免费观看亚洲欧美 | 亚洲天堂网站视频 | 国产原创在线 | 久久手机精品视频 | 黄色aaa级片 | 缴情综合网五月天 | 91视频 - x99av| 国产96在线| 又黄又刺激的视频 | 色在线最新 | 久久国产视频网 | 国产福利网站 | 日韩a级免费视频 | 亚洲欧美视频在线播放 | 日韩电影一区二区在线观看 | 182午夜在线观看 | 午夜12点 | 蜜臀av一区二区 | 成人在线播放av | 综合亚洲视频 | 夜夜婷婷 | 成人在线黄色 | 少妇性xxx | 国产一区二区不卡视频 | 欧美性极品xxxx娇小 | 精品99视频 | 91av色| 亚洲欧美日韩国产精品一区午夜 | 免费黄av| 中文字幕人成人 | 欧美一级免费黄色片 | 国产精品 日韩精品 | 久草视频免费看 | 深夜激情影院 | 三级午夜片 | 亚洲精品欧美视频 | 中文字幕色综合网 | 日韩在线免费 | 天天天天天天操 | 亚洲午夜精品一区 | 久久一视频 | 国产精品久久久久高潮 | 国产不卡视频在线 | 97视频在线免费播放 | 五月天婷亚洲天综合网鲁鲁鲁 | 97超碰资源站 | 亚洲欧洲av在线 | 久久久久综合 | 深爱激情五月婷婷 | 97超碰网 | 久久视频中文字幕 | a色视频 | 91丨九色丨国产丨porny精品 | 91精彩视频 | 免费激情网| 日韩乱码中文字幕 | 亚洲精品午夜久久久久久久久久久 | 开心激情久久 | 国产免费久久精品 | 欧美巨乳网 | 日韩欧美视频一区二区三区 | 最新av中文字幕 | 中文字幕资源网在线观看 | 成人午夜电影网 | 婷婷色在线播放 | 色婷婷骚婷婷 | 亚洲dvd| 亚洲综合在 | 免费网站观看www在线观看 | 国产日本在线观看 | 久久久久免费 | 亚洲精品视频在线观看免费 | 97在线免费视频 | 五月天视频网站 | 国产在线色 | 98超碰在线| 激情黄色一级片 | 天天干夜夜爽 | 国产成人61精品免费看片 | 国产成a人亚洲精v品在线观看 | 中文在线a∨在线 | 色成人亚洲| 黄色成人av网址 | 丁香婷婷久久 | 欧美一级看片 | 亚州精品天堂中文字幕 | 久视频在线 | 91精品国产91久久久久福利 | 精品国产激情 | 中文字幕在线免费观看视频 | 久久成人免费视频 | 激情婷婷欧美 | 国产成人精品午夜在线播放 | 欧美色婷 | 99精品视频免费全部在线 | 精品av网站| 成人午夜精品福利免费 | 色综合五月天 | 国产麻豆精品一区二区 | 欧美激情视频三区 | 美女网站在线播放 | av亚洲产国偷v产偷v自拍小说 | 国精产品满18岁在线 | 五月天久久精品 | 色综合久久久久综合体 | 国产精品1区2区3区在线观看 | 在线亚洲天堂网 | 亚洲高清不卡av | 国产最新视频在线观看 | 免费一级片观看 | 亚洲精品国产品国语在线 | 欧美va天堂va视频va在线 | 久久成人午夜 | 99久久精品无码一区二区毛片 | 激情丁香5月 | 青青草国产精品 | 最近高清中文在线字幕在线观看 | 狠狠色丁香九九婷婷综合五月 | 国产一级片直播 | 香蕉视频在线免费看 | 在线观看一区视频 | 日本中文在线观看 | 狠狠色噜噜狠狠 | 丁香婷婷综合色啪 | 高清av免费观看 | av免费在线观看网站 | 波多野结衣在线观看视频 | 日韩中文字幕在线 | 亚洲久草网 | www久草| 国产免费久久精品 | 久久久久久久久爱 | 蜜臀av麻豆 | 人人插人人艹 | 久久一久久 | 欧美色图亚洲图片 | 国产在线国偷精品产拍 | 久久久精品国产一区二区电影四季 | 中文在线√天堂 | 狠狠操在线 | 国产精品成人一区 | 国产美女视频一区 | 久久久久激情电影 | 国产免费又粗又猛又爽 | 日本高清中文字幕有码在线 | 亚洲精品视频中文字幕 | 久草视频播放 | a国产精品 | 色 中文字幕 | 一区二区三区在线免费观看视频 | 中文在线a天堂 | 亚洲国产成人精品电影在线观看 | 黄色在线免费观看网站 | 中文字幕在线播出 | 国产精品久久久久久a | 国产资源 | 深夜精品福利 | av福利免费 | 激情综合电影网 | 2023天天干 | 麻豆成人精品视频 | 99久久99久久精品国产片果冰 | 国产精品99久久久久久久久久久久 | 激情综合网天天干 | 97色婷婷人人爽人人 | 午夜免费久久看 | 天天操天天干天天操天天干 | 久久这里只有精品9 | 超碰97人人在线 | 一本一本久久a久久精品牛牛影视 | 有没有在线观看av | 人人爽人人澡人人添人人人人 | 99久久婷婷国产综合亚洲 | 国产欧美精品一区二区三区四区 | 91精品一区国产高清在线gif | 99精品区 | 免费色视频在线 | 精品免费在线视频 | 六月激情网 | 91精品国自产在线观看欧美 | 国产精品欧美精品 | 亚一亚二国产专区 | 日韩欧美国产视频 | 99九九热只有国产精品 | 欧美爽爽爽 | 伊人五月天av | 五月天视频网 | 亚洲第一区在线播放 | 东方av免费在线观看 | 久久久精品 | 一区二区av | 一区二区三区影院 | 激情综合色综合久久综合 | 五月婷婷在线视频观看 | 日韩美视频 | 国产一区二区在线观看免费 | 免费成人在线视频网站 | 天天射天天搞 | 久久高清免费观看 | 中文字幕一二 | 91理论片午午伦夜理片久久 | 国产一级在线观看 | www夜夜| 午夜精品一区二区三区在线播放 | 中文乱码视频在线观看 | 亚洲国产三级 | 久久9精品 | 成人一区二区三区在线 | 欧美日韩国产精品一区二区三区 | 国产理论一区二区三区 | 国产精品久久久久久一二三四五 | 成年人免费看 | 日韩一级黄色大片 | 久久99久久99久久 | 国产免费视频一区二区裸体 | 人人澡人人舔 | 国产精品毛片一区二区在线 | 欧美日韩不卡一区 | 久久这里只有精品23 | 丁香花在线视频观看免费 | 在线视频久久 | 精品国产欧美 | 国产一区二区成人 | 日韩精品在线看 | 美国人与动物xxxx | 日韩av免费在线看 | 中国一级片在线 | 国产中文在线字幕 | av免费线看 | 夜夜躁狠狠躁日日躁视频黑人 | 天天想夜夜操 | 亚洲国产精品影院 | 国产精品字幕 | 久久怡红院 | 亚洲日本一区二区在线 | 色婷婷欧美| 国产精品理论视频 | 日韩在线国产精品 | 国产高清在线观看av | 狠狠狠色丁香综合久久天下网 | 美腿丝袜一区二区三区 | 欧美成人精品欧美一级乱 | 97超碰人人澡 | 国产91影视| av在线网站观看 | 国产精品毛片一区 | 丁香婷婷激情国产高清秒播 | 69精品视频 | 国产一二区视频 | 国内精品久久久久久久久久 | 欧美日韩电影在线播放 | 国产精品国产三级国产aⅴ9色 | 日批在线观看 | www91在线 | 激情六月婷婷久久 | 久草免费在线观看视频 | 色吊丝在线永久观看最新版本 | 日韩视频在线观看免费 | 亚洲狠狠| 精品久久久久久综合日本 | 色99在线| 在线观看免费视频 | 精品国产乱码久久久久久浪潮 | 日本99精品 | 99精品视频在线观看 | 色婷婷狠狠五月综合天色拍 | 久久 精品一区 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 在线观看第一页 | www.97色.com| 午夜av在线免费 | 91豆麻精品91久久久久久 | 国产黄色在线网站 | 日韩欧美极品 | 最新日韩在线观看视频 | 久综合网| 亚洲国产精久久久久久久 | 国产一区二区三区在线免费观看 | 不卡av免费在线观看 | 国产精品第三页 | 国产在线中文 | 久久国内精品视频 | 中文在线天堂资源 | 日韩在线资源 | 久久免费视屏 | 久久久国产毛片 | 久久久久久久毛片 | 免费亚洲片 | 99在线视频播放 | 久久欧美在线电影 | 国产99久久久国产精品免费二区 | 狠狠综合久久 | 91免费高清观看 | 99热精品国产| 久久免费看毛片 | 成人av一级片 | 一区二区在线影院 | 国产丝袜制服在线 | 超碰最新网址 | 免费黄色网址网站 | 日韩一区二区免费在线观看 | 亚洲一级影院 | 国产成人精品一区二区在线 | 中文字幕在线观看第三页 | 欧美激情视频一区二区三区免费 | 日韩大片免费在线观看 | 国产精品久久久久久久久久直播 | 丁香午夜婷婷 | 欧美激情视频在线免费观看 | 精品视频在线观看 | 丁香激情综合国产 | 久久久久久久久黄色 | 区一区二在线 | 久草亚洲视频 | 黄色av观看 | 国产精品久久久久久久久久免费看 | 免费下载高清毛片 | 久久久久久毛片精品免费不卡 | 伊人狠狠色 | 国产精品一区二区果冻传媒 | 中文字幕久久久精品 | 久草久草视频 | 天天草天天干 | 免费观看av网站 | 色婷婷a| 欧美日韩18 | 国产国语在线 | 国产精选在线 | 香蕉视频国产在线观看 | 91九色蝌蚪国产 | aaaaaa毛片 | 黄色一级在线观看 | 亚洲最大成人免费网站 | 天天操夜夜干 | 在线视频区 | av一级在线观看 | 高清av免费一区中文字幕 | 久久免费福利视频 | 婷婷午夜 | 亚洲欧洲精品久久 | 国产一级精品在线观看 | 午夜精品久久久久久久久久久久久久 | 国产精品美女久久久久久久久久久 | 久久激五月天综合精品 | 最新国产中文字幕 | 人人舔人人爱 | 精品久久久久久久久久 | 欧美日韩性 | 国产不卡av在线播放 | 黄色免费网站大全 | 久久伊人爱 | 丰满少妇在线 | 亚洲激情国产精品 | 久久精品日产第一区二区三区乱码 | 久久99精品国产一区二区三区 | 黄色电影小说 | 国产精品入口66mio女同 | 成人午夜剧场在线观看 | 成人中文字幕+乱码+中文字幕 | 久久精品国产精品 | 黄色网www | 天天爱天天操天天射 | 中文字幕在线视频第一页 | 久久久久久久久久久精 | 中文字幕一区二区三区乱码不卡 | 99久久超碰中文字幕伊人 | 国产一区二区高清不卡 | 日本成人免费在线观看 | 日韩中字在线观看 | 国产一区二区精品在线 | 成人免费观看完整版电影 | 国产精品久久久久久妇 | 欧美巨乳波霸 | 黄色毛片视频免费观看中文 | 国产精品亚洲综合久久 | 成人免费视频网站 | 日韩天堂网 | 91精品国产99久久久久久红楼 | 久久久久久网 | 最近免费中文字幕 | 91av免费观看 | 中文字幕综合在线 | 粉嫩一区二区三区粉嫩91 | 国产又粗又猛又爽 | 91香蕉视频720p | 国产精品综合av一区二区国产馆 | 欧美一级视频在线观看 | 日韩av一卡二卡三卡 | 久久久久国产精品厨房 | 欧美日本国产在线观看 | 超碰在线1 | 国产一级电影在线 | 在线免费黄色毛片 | 亚洲欧美日韩国产一区二区 | 欧美日韩99 | 毛片网站在线观看 | av解说在线观看 | 欧美精彩视频 | 日韩av电影中文字幕 | 97色在线视频| 天天干天天做天天操 | 91精品在线麻豆 | 深夜免费福利在线 | 特级西西www44高清大胆图片 | 韩国av在线| 精品一区二区在线播放 | 亚洲欧美视频在线 | 永久免费视频国产 | 亚洲在线视频免费观看 | 久久精品黄 | 97日日碰人人模人人澡分享吧 | 麻豆视频免费看 | 国产精品密入口果冻 | 国产精品久久久久久久久久久免费 | 狠狠插狠狠操 | 久久99精品热在线观看 | 日本最新中文字幕 | 最近在线中文字幕 | 久久精品福利视频 | 免费高清在线视频一区· | 欧美伦理电影一区二区 | 九色91在线| 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 成人免费视频观看 | 日操操| 午夜黄色大片 | 麻豆精品在线 | av成人动漫在线观看 | 精品亚洲免a | 香蕉在线影院 | 天天射网站 | 久久国产精品久久w女人spa | 人人爱人人舔 | 久久精品亚洲一区二区三区观看模式 | 91亚洲精品国偷拍 | 日韩爱爱片 | 二区视频在线观看 | 五月婷婷中文网 | 色在线免费观看 | 日韩在线观看av | www.xxx.性狂虐 | 午夜手机看片 | 日韩专区在线 | 天天曰天天 | 久久久久久久久毛片精品 | 亚洲精品在线观看不卡 | 日韩二区精品 | 狠狠色狠狠色合久久伊人 | 亚洲成人av片 | 国产中文在线观看 | 一区二区三区在线影院 | 欧美国产日韩一区二区三区 | 黄网站色成年免费观看 | 免费亚洲精品视频 | 亚洲午夜av电影 | 国产亚洲精品久久 | 国产精品正在播放 | 五月丁香| 色综合狠狠干 | 久久精品综合视频 | av在线播放不卡 | 91视频免费看网站 | 精品在线观看国产 | 99热这里只有精品在线观看 | 日韩久久午夜一级啪啪 | 综合色狠狠 | 中文字幕精品三级久久久 | 黄色亚洲在线 | 亚洲午夜精品福利 | 黄色在线观看免费网站 | 国产97视频 | 久久久免费高清视频 | 国产视频在线观看一区 | 在线观看成人福利 | 91高清视频在线 | 国产做爰视频 | 亚洲精品乱码久久久久久蜜桃动漫 | 91在线porny国产在线看 | 成人久久亚洲 | 不卡电影免费在线播放一区 | 久久99热精品这里久久精品 | 欧美日韩中字 | 免费在线一区二区三区 | 丁香亚洲| 91av在线播放视频 | 国产日韩中文字幕在线 | 久久精品视频免费播放 | 国产精品18久久久久久首页狼 | 国产精品久久久久永久免费观看 | 在线高清av | 久久成人国产 | 操操日日 | 久久精品国产精品亚洲精品 | 国内精品久久久久国产 | 91在线国产观看 | 久久免费视频在线观看6 | 欧美日韩色婷婷 | 成人app在线播放 | 欧美精品一区二区蜜臀亚洲 | 国产精品九九久久久久久久 | 天天操夜夜操夜夜操 | 免费视频一区二区 | 成人午夜免费福利 | 免费在线观看一区二区三区 | 天天操天天射天天爽 | 日韩字幕在线 | 在线之家免费在线观看电影 | 国产手机在线精品 | 在线影院中文字幕 | 伊人国产在线播放 | 国产第一页福利影院 | 久久婷婷亚洲 | 国产区网址 | 久久久国产在线视频 | 2023年中文无字幕文字 | 天堂在线一区二区 | 少妇bbbb搡bbbb桶 | 精品视频久久久久久 | 久久大片网站 | 亚洲天堂网在线视频 | 精品视频网站 | 视频国产| 97高清免费视频 | 日韩亚洲在线视频 | 国产香蕉av| 婷婷深爱五月 | 午夜国产福利在线 | aaa毛片视频 | 天天色成人 | 国产成人91 | 国产日韩精品久久 | 色婷婷av在线 | 久久免费播放视频 | 人人干狠狠操 | 热九九精品 | 色婷婷国产精品 | 久久久精品国产一区二区三区 | 黄网在线免费观看 | 午夜成人影视 | 在线观看日韩中文字幕 | 久久精品99精品国产香蕉 | 精品美女在线观看 | 五月天婷亚洲天综合网精品偷 | 婷婷久操| 国产激情小视频在线观看 | 国产97视频 | 在线免费观看视频一区 | 久草在线免 | 干干夜夜 | 五月婷婷综合久久 | 国产在线91在线电影 | 91成人在线看| 在线免费视频a | 欧美一区二区三区特黄 | 91在线播放国产 | 激情偷乱人伦小说视频在线观看 | 国产亚洲精品久久久久久网站 | 欧美激情视频在线免费观看 | 综合五月婷婷 | 99热国产在线观看 | 中文字幕乱码电影 | 日韩大片在线看 | 免费韩国av| 日日夜夜免费精品视频 | 91亚洲成人 | 免费在线一区二区 | 国产99区| 久久艹人人 | 精选久久 | 国产免费不卡 | 欧美日韩免费在线观看视频 | 久久久在线视频 | 午夜国产一区二区三区四区 | 美女网站视频免费都是黄 | av千婊在线免费观看 | 亚洲天堂首页 | 亚洲精品www| 国内丰满少妇猛烈精品播 | 在线色吧 | 射久久| 欧美一级片在线观看视频 | 涩涩爱夜夜爱 | 综合久久一本 | 天天碰天天操视频 | 91中文字幕视频 | 午夜在线看 | 97人人模人人爽人人少妇 | 午夜视频久久久 | 成人av影视| 精品美女久久久久 | 国产一级免费观看视频 | 欧美成人免费在线 | 91热精品| 免费不卡中文字幕视频 | 国产精品女人久久久 | 亚洲最新视频在线播放 | 国产日韩精品欧美 | 欧美色图另类 | 日韩三级视频 | 国产99久久精品一区二区300 | 国产色综合天天综合网 | 福利视频在线看 | 免费看黄色91 | 精品99免费 | 国产一区久久 | 亚洲成a人片77777kkkk1在线观看 | 国产亚洲va综合人人澡精品 | 伊人成人激情 | 精品在线视频播放 | 在线黄色免费 | 97精品国产97久久久久久粉红 | 97伊人网| 免费在线观看不卡av | 亚洲精品欧美成人 | 在线高清av | 精品伦理一区二区三区 | 精品在线视频观看 | 久久久九色精品国产一区二区三区 | 久久99亚洲精品久久 | 国产精彩视频 | 在线观看激情av | 一区精品在线 | 国产亚洲日本 | 国产精品久久久99 | 九九免费在线观看 | 亚洲国产激情 | 中文字幕一区二区三区久久蜜桃 | 黄色片网站av | 日韩videos高潮hd | 人人草在线视频 | 国产视频亚洲视频 | www国产亚洲精品久久网站 | 日日干av | 69久久99精品久久久久婷婷 | 天堂网一区二区三区 | 国产一区精品在线观看 | 成人免费在线观看av | 国产手机免费视频 | 91亚洲精品乱码久久久久久蜜桃 | 色资源网免费观看视频 | 欧美精品一区二区在线观看 | 97精品国产 | 午夜精品一区二区三区在线播放 | 亚洲三级黄色 | 在线观看岛国 | 亚洲欧洲xxxx | 六月丁香在线观看 | 日日天天狠狠 | 精品高清视频 | 国产一线二线三线在线观看 | 久二影院 | 久草视频首页 | 久久99免费观看 | 五月婷婷,六月丁香 | 免费三级a | 一区二区视频免费在线观看 | 91夫妻视频| 欧美一级久久久久 | 色欲综合视频天天天 | 色多视频在线观看 | 亚洲久草视频 | 丁香六月五月婷婷 | 国产精品免费在线视频 | 免费精品在线视频 | av免费看电影 | 99久热在线精品视频 | 国产精品亚 | 婷婷在线网站 | 青青河边草免费视频 | 国产激情小视频在线观看 | www国产亚洲精品久久麻豆 | 精品国产精品久久 | 干 操 插 | 成年人黄色免费看 | 在线观看黄污 | 成人在线观看资源 | 国产一级片网站 | 91精品1区2区| 97在线看片 | 亚洲欧洲成人 | 9ⅰ精品久久久久久久久中文字幕 | 99资源网 | 亚洲永久av | 日批在线看 | 色婷婷av一区二 | 99久久夜色精品国产亚洲96 | 欧美另类高潮 | 免费韩国av | 亚洲一片黄 | 在线播放亚洲激情 | 中文字幕影视 | 天天综合色网 | 亚洲人人爱| 亚洲国产高清视频 | 久艹在线播放 | 国产在线观看一 | 奇米影视999 | 亚洲精品视频一 | 久久国产美女 | 欧美精品被 | 欧美日韩亚洲在线观看 | 天天综合网入口 | 国产精品一区二区吃奶在线观看 | 91高清免费 | 丁香婷婷网 | 国产精品久久久久久五月尺 | 91麻豆精品国产自产在线游戏 | 日本色小说视频 | 中文字幕日韩高清 | 国产精品久久久久久久久久免费 | 中文在线字幕免费观 | 亚洲国产伊人 | 国产精品电影一区 | 欧美日韩中文国产一区发布 | 国产日韩中文字幕在线 | 日韩欧美高清在线观看 | 国产一区免费在线观看 | 久视频在线 | 中文字幕久久亚洲 | 欧美日本不卡视频 | 国产视频美女 | 精品欧美一区二区在线观看 | 97成人精品视频在线播放 | 在线观看播放av | av免费在线观看网站 | 久久av一区二区三区亚洲 | 国产在线观看免费av | 中文字幕在线观看第三页 | 中文字幕在线免费看 | 婷婷丁香综合 | 天天天色综合 | 免费黄色在线 | 中国美女一级看片 | 麻豆视频网址 | 91精品国产一区二区在线观看 | www.亚洲精品 | 国产精品久久久久久久7电影 | 在线视频a| 日本黄色大片免费 | 日韩精品一区二区三区中文字幕 | 国产精品美女久久久久aⅴ 干干夜夜 | 粉嫩一区二区三区粉嫩91 | 成人毛片一区 | 美女国产在线 | 成人黄色短片 | 天天摸天天操天天爽 | 午夜精品久久久久久久99 | 激情深爱.com | 天天操天天是 | 国产黄色av网站 | 99久久精品久久久久久动态片 | 精品在线观看视频 | 国产短视频在线播放 | 久久99精品久久久久久秒播蜜臀 | 国产亚洲精品久 | 久久最新网址 | 久久免费视频网站 | 激情久久久久久久久久久久久久久久 | www178ccom视频在线 | 国产精品毛片久久 | 四虎影视av| 91在线操 | 毛片网在线 | 日韩av线观看 | 日韩视频三区 | av女优中文字幕在线观看 | 亚洲人久久 | 久久免费的精品国产v∧ | 99色在线播放 | 日韩 国产 | 欧美精品亚洲精品 | 成人av电影在线播放 | 男女免费视频观看 | 国产日韩在线一区 | 午夜精品一区二区三区在线 | www.黄色网.com | 丁香午夜婷婷 | 成人黄色电影在线 | 亚洲人人av| 国产福利精品在线观看 | 干干夜夜 | 久久免费电影 | 高清中文字幕av | 国产黄视频在线观看 | 国精产品999国精产品岳 | 成年人av在线播放 | 国语自产偷拍精品视频偷 | 99精品偷拍视频一区二区三区 | 日韩中文字幕视频在线 | 99这里只有精品99 | 98精品国产自产在线观看 | 爱爱一区| 激情视频一区 | 九九热只有这里有精品 | 国产视频久久久久 | 中文字幕免费观看视频 | 欧美精品在线一区 | 国产精品系列在线观看 | 日韩视频一 | 亚洲精品97 | 国内精品视频在线 | 青青网视频 | 嫩草av在线 | 九九免费视频 | 四虎www. | 久久一久久| av视屏在线播放 | 久久99精品一区二区三区三区 | 日韩免费福利 | 亚洲精品乱码久久久久久高潮 | 欧美a级成人淫片免费看 | 9999精品免费视频 | 99精品在线播放 | 久久艹国产视频 | 天天色天天色 | 狠狠狠色狠狠色综合 | 黄色的网站免费看 | 欧美亚洲另类在线视频 | 欧美激情奇米色 | 精品999 | 天天爱天天色 | 在线一区二区三区 | 91综合久久一区二区 | 色多多视频在线观看 | 日韩3区 | 国产v在线观看 | www.狠狠操.com | a天堂一码二码专区 | 日批视频在线播放 | 一区二区三区在线免费观看 | 99精品在线 | 在线国产不卡 | 免费观看v片在线观看 | av网站播放 | 精品福利在线 | 国产无遮挡又黄又爽馒头漫画 | 韩日精品视频 | 久久久久久蜜桃一区二区 | 人人爽人人舔 | 国产亚洲一区 | 毛片精品免费在线观看 | 99久久精品免费看国产一区二区三区 | 欧美激情第十页 | 中文字幕在线观看视频网站 | 久久这里 | 午夜精品av | 久久精品79国产精品 | 色999五月色| 国产片免费在线观看视频 | 久久免费视频7 | 午夜久久成人 | 亚洲欧美日韩精品久久久 | 成人四虎 | 免费亚洲一区二区 | 久久久久| 草久在线观看 | 日本精品久久久久中文字幕 | 国产aa精品 |