我目前正在爲一些網絡監控工具的Java應用程序工作。在我的代碼中,我應該使用很多日誌記錄。由於它是網絡管理軟件,日誌中的信息對用戶非常有用,因此必須使用它們。但是現在我對我更喜歡什麼樣的記錄器方法感到困惑。現在我使用Logger.lop(...//...)
,因爲在它的幫助下,我們還記錄了類名和方法,因此對於我(開發人員)來說,調試代碼和發現錯誤變得非常容易。但最後我很困惑,我應該用相同的日誌機制把它交付給最終用戶嗎?讓用戶知道當前正在執行什麼樣的類,在哪種方法中發生錯誤是否有害。我在很多產品中看過很多次異常處理stacktrace,因此通常我們也會使用類名稱。那麼讓enduser知道你的類名和方法是什麼沒有問題?可以在java產品中記錄源類名稱和方法名稱嗎?
3
A
回答
6
在考慮安全性影響之前,請考慮性能。在大多數日誌記錄系統中,日誌記錄工具動態獲取實際的類名和方法名稱需要反射,並大大減緩日誌記錄 - 通常是同步操作。我的猜測是,在網絡監控應用程序中,你真的不希望這樣。
如果您將方法名稱硬編碼到日誌消息中(通過使其成爲消息或類別的一部分),這是一個不同的故事。作爲一名安全人員,我認爲這不是什麼大不了的事情 - 如果你的代碼是用Java編寫的,那麼它可以顛倒過來,所以你的代碼的運行方式應該是安全的,即使代碼被送走了。
所有這一切,你可以使用不同的日誌配置進行開發和生產,或者那些細粒度的消息可以進行調試,跟蹤等。如果你使用log4j,通常建議使用isDebugEnabled
以包含任何動態計算的日誌語句 - 這些日誌語句是在日誌語句確定是否啓用之前計算得出的。
+0
似乎Log4j確實使用了反射...但Logback(默認的SLF4J實現)?我相信,在JDK 1.5+中,您可以調用Thread.getStackTrace()來獲取堆棧跟蹤元素,並從頂層元素中獲取方法名稱 - 而無需反射。看起來像一個體面的伐木系統將使用該設施。 –
7
1
值得一提的是,這種日誌記錄在Java中的性能成本很高,與通常使用預處理器實現的C++相反。幸運的是,使用log4j/logback,您可以按照Bozho的建議開啓和關閉—。
相關問題
- 1. iPhone和iPad - 可以在Xcode上更改產品名稱嗎?
- 2. Magento目錄產品子類別名稱
- 3. 「產品名稱」和「包裝顯示名稱」必須匹配嗎?
- 4. iPhone產品名稱
- 5. C#中的屬性名稱和方法名稱可以相同嗎?
- 6. BCEL - 獲取類名稱,元素名稱和方法名稱
- 7. 產品名稱中的Xcode:CURRENT_PROJECT_VERSION
- 8. 如何添加動態元標記,類別名稱:subcategoryname:產品名稱在Magento
- 9. 我可以使用內建名稱作爲Python類的方法名稱嗎?
- 10. 隱藏產品名稱和產品頁面上的類別
- 11. 全文搜索產品目錄名稱
- 12. 我可以在Java中創建另一個方法名稱,因此可以通過自定義名稱或所需的方法名稱來調用它嗎?
- 13. str_replace magento產品名稱
- 14. 按名稱識別產品
- 15. 產品名稱更改
- 16. 產品名稱不更新
- 17. {{lineItem.product.name}}不使產品名稱
- 18. 在Google的IAB中,我可以在調用launchpurchaseflow方法之前獲得產品名稱和價格嗎?
- 19. Elasticsearch部分產品類型名稱
- 20. 以上是shopify中產品價格的產品名稱
- 21. 在Magento中按名稱排序產品
- 22. 在odoo中獲取產品名稱
- 23. 在Shopify中獲取產品名稱
- 24. 導出類名稱,給定名稱空間的方法名稱
- 25. 我可以通過名稱調用類的靜態方法嗎?
- 26. 無法從Magento產品集合中獲取產品名稱
- 27. 有什麼辦法可以在Android中自動記錄方法名稱?
- 28. 產品名稱define for visual C++和c#
- 29. 我可以在Java8中引用方法名稱嗎?
- 30. 我可以在current_page方法中使用名稱空間嗎?
@所有它可能會看到一個理論上的問題,但仍然不是邏輯 – amod