日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BeetleX网关自定义请求日志插件

發布時間:2023/12/4 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BeetleX网关自定义请求日志插件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

網關轉發日志非常有用可以進行數據和行為分析,組件提供一個默認的日志插件,但默認記錄的東西比較簡單不一定滿足業務的需要;其實組件提供信息非常完善足以滿足不同情況的需要。在這里介紹一下如何實現一個日志插件來記錄自己需要的信息,。

插件接口

IRequestedHandler是一個代理轉發完成的接口,通過實現這一接口可以把轉發的結果信息記錄下來,先看一下這個接口的定義:

public interface IPlugin{string Name { get; }string Description { get; }PluginLevel Level { get; }void Init(Gateway gateway, Assembly assembly);void LoadSetting(JToken setting);object SaveSetting();}public interface IRequestedHandler : IPlugin{void Execute(EventRequestCompletedArgs e);}

IRequestedHandler承繼了IPlugin,而IPlugin則是描述一個插件的基礎信息,主要有包括名稱,說明,執行級別和配置處理等.

實現

接下來實現一個轉發完成把信息輸出控制臺的擴展:

class ConsoleLog : Bumblebee.Plugins.IRequestedHandler{public string Name => "custom_console_log";public string Description => "custom_console_log";public PluginLevel Level => PluginLevel.None;public void Execute(EventRequestCompletedArgs e){Console.WriteLine($"{DateTime.Now} {e.RemoteIPAddress} {e.Gateway.InstanceID} {e.RequestID} {e.SourceUrl} {e.Code}");}public void Init(Gateway gateway, Assembly assembly){}public void LoadSetting(JToken setting){}public object SaveSetting(){return null;}}

代碼很簡單就是把轉發完成的信息在控制臺打印出來,LoadSetting和SaveSetting并沒有實現,因為這個記錄日志的功能并不需要配置;如果需要把內容寫入數據庫或一些服務那則需要實現這兩個方法來加載和配置處理相關服務信息。

事件信息

接下來就看了下完成事件提供有那些信息了:

public struct EventRequestCompletedArgs{public Routes.UrlRoute UrlRoute { get; set; }public int Code { get; }public ServerAgent Server { get; set; }public long Time { get; set; }public bool UrlRewrite { get; set; }public string SourceBaseUrl { get; set; }public string SourceUrl { get; set; }public string SourcePath { get; set; }public long RequestID { get; set; }public string Method { get; set; }public IDictionary<string, string> Cookies { get; set; }public IDictionary<string, object> Data { get; set; }public string RemoteIPAddress { get; set; }public Gateway Gateway { get; set; }public string BaseUrl { get; set; }public string Url { get; set; }public string Path { get; set; }public string Host { get; set; }public IDictionary<string, string> Headers { get; set; }public string Error { get; set; }}

這個類提供了非常詳細的信息,請求有那些信息,是否有經過url重寫,來源于那個地址和轉發到那個服務節點上都有詳細記錄。

使用插件

插件的引入非常簡單,只需要通過組件Gateway.LoadPlugin加載插件所在的程序集即可,代碼如下:

gateway.LoadPlugin(typeof(Bumblebee.Configuration.Config).Assembly, typeof(Program).Assembly);

插件加載完成后還需要配置到網關中

gateway.Pluginer.SetRequested("custom_console_log");

通過以上配置,這個日志插件就會把所有代理請求都輸出到控制臺用。

獲取示例詳細代碼:?https://github.com/IKende/BeetleX-Samples/tree/master/Gateway.LogPlugin

總結

以上是生活随笔為你收集整理的BeetleX网关自定义请求日志插件的全部內容,希望文章能夠幫你解決所遇到的問題。

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