我目前正在爲一些網絡監控工具的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. iPhone產品名稱
- 3. C#中的屬性名稱和方法名稱可以相同嗎?
- 4. BCEL - 獲取類名稱,元素名稱和方法名稱
- 5. 產品名稱中的Xcode:CURRENT_PROJECT_VERSION
- 6. 我可以使用內建名稱作爲Python類的方法名稱嗎?
- 7. 我可以獲取當前線程產生的類和方法的名稱嗎?
- 8. C#類名稱 - 方法名稱衝突
- 9. 我可以在Java中創建另一個方法名稱,因此可以通過自定義名稱或所需的方法名稱來調用它嗎?
- 10. {{lineItem.product.name}}不使產品名稱
- 11. 以上是shopify中產品價格的產品名稱
- 12. 在odoo中獲取產品名稱
- 13. 導出類名稱,給定名稱空間的方法名稱
- 14. 我可以通過名稱調用類的靜態方法嗎?
- 15. 產品名稱define for visual C++和c#
- 16. 我可以在Java8中引用方法名稱嗎?
- 17. 產品商標名稱乞求類/命名空間同名
- 18. PHP Woocomerce獲得產品品牌名稱
- 19. Spree:顯示產品的品牌名稱?
- 20. Java:方法名稱約定
- 21. 非默認存儲的可配置產品的產品名稱
- 22. 父類和子類中的方法名稱相同嗎?
- 23. Magento產品頁面上的循環類別名稱及其子類名稱
- 24. 按名稱獲取記錄器,打印類名稱
- 25. 在Java中查找調用方法和類的名稱
- 26. 導軌產品名稱在視圖
- 27. 在方法名稱
- 28. 在Java中的數組列表中不匹配產品名稱
- 29. WordPress的設置名稱和父類的產品類別
- 30. 強類型方法名稱
@所有它可能會看到一個理論上的問題,但仍然不是邏輯 – amod