亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

控制請求對象解構的選項

控制請求對象解構的選項

C#
慕妹3146593 2021-10-31 20:05:04
我遇到了一個問題,我正在努力尋找一個干凈的解決方案,谷歌搜索并沒有讓我變得更聰明。情況(1) 我們有自己的程序集,用于為我們的任何項目(一致的日志輸出、主題等)設置和添加 Serilog 記錄器,并且該程序集沒有對任何使用項目(位于不同的存儲庫中)的引用。讓我們稱之為CompanySerilog大會。(2) 消費項目之一是外部可訪問的 API,其“合同”對象在 ExternalContracts 程序集中定義。即請求和響應對象,以及用作這些對象一部分的任何枚舉??梢詫⒋?ExternalContracts 程序集提供給針對 API 進行集成的開發人員。(3) 我們想記錄所有請求,并使用一個IActionFilter使用 Serilog 結構化日志記錄方法注銷每個請求對象。例如循環遍歷上下文中的每個參數并最終執行_logger.LogDebug("With {name} of {@requestObject}", name, value);問題一些請求對象具有我們想要屏蔽的敏感數據,但是:創造記錄儀時,我們可以定義解構的方法CompanySerilog使用標準的.Destructure擴展,但不知道,或者想知道,要求的具體對象,因為這些可能是從Api1,Api2等等,這將意味著要添加到每一個參考消耗項目。我們可以向請求對象 ( Destructurama.Attributed)添加屬性,但這意味著我們的ExternalContracts程序集現在需要對該 NuGet 包的引用,而后者又需要對所有必需的 Serilog 包的引用。嚴格來說,ExternalContracts 程序集中不需要日志記錄問題:這是我們的問題,而不是我們 API 的使用者正如我所說,我一直在努力想出解決這個問題的方法,但找不到太多關于使用 IDestructuringPolicy 的信息,以及它是否合適,或者轉換是否應該發揮作用。到目前為止,我只能想到以下選項,但我希望其他人遇到了這個問題,并且有一種非常聰明和干凈的方式來支持這個用例。解決方案?停止進行結構化日志記錄,只需ToString()為每個請求對象定義一個掩蔽我們不想記錄的值的對象。這很簡單,不需要討厭的項目交叉引用或將日志記錄問題添加到外部合同中。但這確實意味著不可能進行結構化日志記錄。將所有需要的日志引用添加到外部合約中。這將允許我們繼續使用內置銷毀,但意味著我們 API 的使用者將擁有一個包含日志程序集的 ExternalContracts 程序集通過引用將使用此程序集的每個項目,.Destructure在配置登錄時設置值CompanySerilog。不會發生!還有什么?請!
查看完整描述

2 回答

  • 2 回答
  • 0 關注
  • 207 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號