搜尋
首頁後端開發php教程五個方式提高程式設計師的日誌質量

五個方式提高程式設計師的日誌品質
最近湧現出各種各樣能幫助程式設計師理解日誌的新工具,有類似Scribe、Logstash 這樣的開源項目,也有類似Splunk 的預付費工具,還有託管服務如SumoLogic 和PaperTrail。這些工具的共同點是對日誌資料進行清洗,在大量日誌中提取一些更有價值的文件。
提高日誌品質的五大技巧
但有一件事這些工具卻愛莫能助,因為它們完全依賴你實際投入的日誌數據,而如何保證數據的質量和數量則需要用戶自行完成。因此,在關鍵時刻,如果你需要基於部分或遺漏日誌做程式碼偵錯時,事情可能會變得非常棘手。
為了減少這種情況發生,在這裡分享五個建議,在你記錄日誌時最好能銘記於心:
1. 你好,我的(線程)名字是
正如Ringo,線程名稱這個屬性是Java中最被低估的方法之一。原因是線程名稱大部分是描述性的。然而問題同樣出現在這裡,類似人們自己,取名時通常會被賦予一定的意義。而在多執行緒日誌中,執行緒名同樣揮舞著關鍵作用。通常情況下,大多數日誌框架會記錄目前所呼叫的執行緒名稱。可悲的是,我們通常會看到 http-nio-8080-exec-3 這個名字,簡單地由線程池或容器進行分配。
出於某種原因,我們曾經不只一次聽過這種誤解——線程名稱是不可變的。與之相反,在日誌中,線程名稱佔據基本主要地位,你應該確保能正確使用。例如將它與具體情境結合起來,例如 Servlet 的名字、任務相關,或一些動態情境如使用者或訊息 ID。
這樣的話,程式碼介面應該是這樣:
Thread.currentThread().setName(ProcessTask.class.getName() + “: “+ message.getID);
更先進的版本將會載入到目前執行緒的局部執行緒變量,配置log appender,並自動將其新增至日誌條目。
當多個執行緒寫入伺服器日誌,但你需要集中在單一執行緒上時,這將會非常有用。如果你在一個分散式 /SOA 環境下運行,更能看到它得天獨厚的優勢。
2. 分散式的識別碼
在 SOA 或訊息驅動的架構,任務執行很可能跨多台機器。當處理這種環境下的故障時,連接相關機器和它們的狀態將是了解特定情況的關鍵。大多數日誌分析器會將這些日誌資訊分組,假設你為它們提供了唯一標識,它們便可以作為實際日誌訊息的一部分。
從設計的角度出發,這意味著,從進入系統到操作完成,每一個入站操作應該有其唯一的 ID 對應。請注意,一個持久的標識符,如使用者 ID 可能不是一個好容器。在記錄日誌檔案的過程中,使用者可能有多個操作,這將使得隔離特定流更加困難。 UUIDs 可能是個不錯的選擇。它的值可以被載入到實際執行緒名稱或作為 TLS-thread 的局部儲存器。
3. 不要使用文字+驅動器,不要日誌+循環
很多時候,你會看到一段程式碼在緊密的循環中運行,並執行相應的日誌操作。基本假設是,該程式碼運行的次數是有限的。
很可能運作情況非常良好。但是當程式碼得到意外輸入時,循環可能並不會中斷。在這種情況下,你不只是處理一個無限循環「雖然這樣已經很糟糕了」,你正在處理的程式碼正將無限量的資料寫到磁碟或網路。
在單機場景中它可能會造成一台伺服器崩潰,而在分散式場景中,受影響的則是整個叢集。因此如果可能,不要在緊密循環中記錄日誌。捕獲錯誤時,這一點尤其如此。
下面這個例子,記錄了一個while 循環中的異常:
void read() {
while (hasNext()) { 
try { 
readData(); 
} catch {Exception e) {this / t recommend
logger.error(“error reading data“, e); 
}
}
}
如果readData 拋出異常,而hasNext 回傳值為true,這裡將會寫入無限量的日誌資料。解決這個問題的方法是確保不會記錄這一切:
void read() { 
int exceptionsThrown = 0; 
while (hasNext()) { 
try { 
readData();
if (exceptionsThrown logger.error(“error reading data", e); 
exceptionsThrown++; 
} else {
// Now the error won't
另一種方法是從循環中移除日誌記錄,並保存第一/最後一個異常物件並在其它地方記錄。
4. 未捕獲的處理程序
Westeros 有最後一道防禦牆,而你有 Thread.uncaughtExceptionHandler。因此,盡量使用它們。如果沒有安裝這些處理程序,在異常拋出時,你只能獲得很少有價值的上下文,同時你也無法控制在結束之前你已經將其記錄,並確定記錄的位置。
請注意,即使在未捕獲的異常處理程序,看起來你沒有任何辦法訪問線程中(已終止)的任何變量,你仍然可以獲得實際線程對象的引用。如果你堅持# 1步,你還是會得到一個有意義的thread.getName()值可記錄。
5. 擷取外部呼叫
每當呼叫一個外部的 API, JVM 異常的幾率將大大增加。這包括 Web 服務、 HTTP、 DB、 檔案系統、作業系統和任何其他 JNI 呼叫。認真對待每個調用,因為它隨時會爆炸 “它很有可能發生在同樣的點”。
大多數情況下,外部 API 故障的原因是意外輸入,日誌中對其記錄是修復程式碼的關鍵。
在這一點上,你可以選擇不記錄錯誤,只是拋出異常也可以。在這種情況下,只要收集到調用的相關參數,並將其解析為異常錯誤訊息。
只要確保異常被捕獲並記錄在更高層級的堆疊呼叫即可。
免費領取LAMP兄弟連原創PHP影片教學光碟/《細說PHP》精要版,詳情諮詢官網客服:
http://www.lampbrother.net
【兄弟連IT教育】學PHP、Linux、HTML5、UI、 Android等影片教學(課件+筆記+影片)!
網盤教學下載:http://pan.baidu.com/s/1mg8ANMg

以上就介紹了五個方式提高程式設計師的日誌質量,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP的目的:構建動態網站PHP的目的:構建動態網站Apr 15, 2025 am 12:18 AM

PHP用於構建動態網站,其核心功能包括:1.生成動態內容,通過與數據庫對接實時生成網頁;2.處理用戶交互和表單提交,驗證輸入並響應操作;3.管理會話和用戶認證,提供個性化體驗;4.優化性能和遵循最佳實踐,提升網站效率和安全性。

PHP:處理數據庫和服務器端邏輯PHP:處理數據庫和服務器端邏輯Apr 15, 2025 am 12:15 AM

PHP在數據庫操作和服務器端邏輯處理中使用MySQLi和PDO擴展進行數據庫交互,並通過會話管理等功能處理服務器端邏輯。 1)使用MySQLi或PDO連接數據庫,執行SQL查詢。 2)通過會話管理等功能處理HTTP請求和用戶狀態。 3)使用事務確保數據庫操作的原子性。 4)防止SQL注入,使用異常處理和關閉連接來調試。 5)通過索引和緩存優化性能,編寫可讀性高的代碼並進行錯誤處理。

您如何防止PHP中的SQL注入? (準備的陳述,PDO)您如何防止PHP中的SQL注入? (準備的陳述,PDO)Apr 15, 2025 am 12:15 AM

在PHP中使用預處理語句和PDO可以有效防範SQL注入攻擊。 1)使用PDO連接數據庫並設置錯誤模式。 2)通過prepare方法創建預處理語句,使用佔位符和execute方法傳遞數據。 3)處理查詢結果並確保代碼的安全性和性能。

PHP和Python:代碼示例和比較PHP和Python:代碼示例和比較Apr 15, 2025 am 12:07 AM

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP行動:現實世界中的示例和應用程序PHP行動:現實世界中的示例和應用程序Apr 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP:輕鬆創建交互式Web內容PHP:輕鬆創建交互式Web內容Apr 14, 2025 am 12:15 AM

PHP可以輕鬆創建互動網頁內容。 1)通過嵌入HTML動態生成內容,根據用戶輸入或數據庫數據實時展示。 2)處理表單提交並生成動態輸出,確保使用htmlspecialchars防XSS。 3)結合MySQL創建用戶註冊系統,使用password_hash和預處理語句增強安全性。掌握這些技巧將提升Web開發效率。

PHP和Python:比較兩種流行的編程語言PHP和Python:比較兩種流行的編程語言Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP的持久相關性:它還活著嗎?PHP的持久相關性:它還活著嗎?Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具