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网关自定义请求日志插件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 提高文档翻译效率神器:VS Code 插
- 下一篇: 使用SignalR从服务端主动推送警报日