自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

全棧必備 Log日志

開發(fā) 開發(fā)工具
Log日志,不論對開發(fā)者自身,還是對軟件系統(tǒng)乃至產(chǎn)品服務(wù)都是非常重要的事情。每個開發(fā)者都接觸過日志,以至于每個人對日志的了解都會有所不同。

Log日志,不論對開發(fā)者自身,還是對軟件系統(tǒng)乃至產(chǎn)品服務(wù)都是非常重要的事情。每個開發(fā)者都接觸過日志,以至于每個人對日志的了解都會有所不同。

[[193822]] 

什么是日志

日志是什么呢?老碼農(nóng)看來,日志是帶有明確時間標(biāo)記的信息數(shù)據(jù)記錄。

根據(jù)不同的使用場景和視角,日志的分類也多種多樣。針對生成日志的主體,如果是開發(fā)者,可以有工作或?qū)W習(xí)日志,如果是代碼,可以是程序日志。根據(jù)應(yīng)用程序的使用領(lǐng)域,可以有系統(tǒng)日志和應(yīng)用日志,還可以進(jìn)一步細(xì)分,例如消息日志,事件日志,數(shù)據(jù)庫日志等等。

記日志的方式

對于開發(fā)者而言,隨手記日志(筆記)是一個良好的工作習(xí)慣。將工作或?qū)W習(xí)中遇到的問題,解決方案,新的體會隨時記下來,日積月累,就可以逐漸形成自己的知識體系。作為一個Evernote 的深度用戶,老碼農(nóng)推薦使用Evernote,當(dāng)然有道云筆記之類的其他工具同樣有效。開發(fā)者自身的日志一般都是給自己看的,記錄工作或?qū)W習(xí)日志的方式因人而異,適合自己就好。

而程序代碼中的日志,多用于應(yīng)用中相關(guān)信息的跟蹤記錄,要便于其他開發(fā)者或者其他應(yīng)用程序使用,一般是由日志標(biāo)準(zhǔn)的。廣泛使用的日志記錄標(biāo)準(zhǔn)是RFC 5424(https://tools.ietf.org/html/rfc5424)中定義的syslog。 syslog標(biāo)準(zhǔn)能夠標(biāo)準(zhǔn)化系統(tǒng)生成,過濾,記錄和分析日志消息。例如,其中定義的日志重要等級是這樣的:

  1. Emergency: system is unusable 
  2. Alert: action must be taken immediately 
  3. Critical: critical conditions 
  4. Error: error conditions 
  5. Warning: warning conditions 
  6. Notice: normal but significant condition 
  7. Informational: informational messages 
  8. Debug: debug-level messages 

在實(shí)際應(yīng)用中,根據(jù)應(yīng)用場景,有可能不完全遵從RFC 5424, 但依然可以從各種各樣日志工具庫中看到他們的影子,參考《全棧的技術(shù)棧設(shè)想》,對于全棧必備的幾種編程語言而言,Java中的Log4j,Python 中的Logging, JavaScript 中的log4JS都是不錯的選擇,遺憾的是,老碼農(nóng)沒有在Objective C 中使用過較好的日志庫,還在用將nslog 寫入文件的方式記日志,在C/C++中到是曾經(jīng)用過log4CXX以及zlog。

在python 的世界里,有著這樣相對偏執(zhí)的說法,“以日志調(diào)試為榮,以單步跟蹤為恥”。雖然有矯枉過正的嫌疑,但充分說明了記log日志的重要性。

常見應(yīng)用中的日志

成熟的系統(tǒng)中都有著自己的日志子系統(tǒng),例如windows的系統(tǒng)日志,Linux的syslog,docker的容器日志等。這里簡要回顧一些常見后端服務(wù)中的日志:Nginx日志,mysql 日志 和 tomcat 日志。

Nginx日志主要分為兩種:訪問日志和錯誤日志。訪問日志主要記錄客戶端訪問Nginx的每一個請求,格式可以自定義。通過訪問日志,可以得到用戶地域來源、跳轉(zhuǎn)來源、使用終端、某個URL訪問量等相關(guān)信息。錯誤日志主要記錄客戶端訪問Nginx出錯時的日志,格式不支持自定義。通過錯誤日志,可以得到系統(tǒng)某個服務(wù)或server的性能瓶頸等。在分析nginx 日志時, 老碼農(nóng)目前比較喜歡的工具是goaccess.

Tomcat下相關(guān)的日志文件有Cataline引擎的日志文件,文件名catalina.日期.log;Tomcat下內(nèi)部代碼丟出的日志,文件名localhost.日期.log;Tomcat下默認(rèn)manager應(yīng)用日志,文件名manager.日期.log ;控制臺輸出的日志,Linux下默認(rèn)重定向到catalina.out ;通過Servlet.xml配置的Access日志,應(yīng)用程序以log4j.properties:${catalina.base}/logs/probe.log重定向的日志等等。 就分析工具而言,老碼農(nóng)目前覺得Awstats是個不錯的工具。

MySQL有以下幾種日志:

  1. 錯誤日志:記錄啟動、運(yùn)行或停止時出現(xiàn)的問題,一般也會記錄警告信息。
  2. 一般查詢?nèi)罩荆河涗浗⒌目蛻舳诉B接和執(zhí)行的語句。
  3. 慢查詢?nèi)罩荆河涗浰袌?zhí)行時間超過longquerytime秒的所有查詢或不使用索引的查詢,可以幫我們定位服務(wù)器性能問題。
  4. 二進(jìn)制日志:任何引起或可能引起數(shù)據(jù)庫變化的操作,主要用于復(fù)制和即時點(diǎn)恢復(fù)。
  5. 中繼日志:從主服務(wù)器的二進(jìn)制日志文件中復(fù)制而來的事件,并保存為的日志文件。
  6. 事務(wù)日志:記錄InnoDB等支持事務(wù)的存儲引擎執(zhí)行事務(wù)時產(chǎn)生的日志。

MySQL 中的日志不僅僅是跟蹤信息,而且成為了業(yè)務(wù)系統(tǒng)的一部分。就日志分析而言,老碼農(nóng)最喜歡的就是percona-toolkit了,尤其是其中的慢查詢分析工具pt-query-degist.

根據(jù)應(yīng)用中的日志,可以獲知系統(tǒng)中更有價值的信息,而且可以為自己的日志系統(tǒng)提供資糧。

日志分析平臺

對單應(yīng)用實(shí)體的日志分析,可以有一些非常不錯的工具,例如上面提到的pt,goaccess等等。但是,對于整個應(yīng)用系統(tǒng)而言,在工作流或任務(wù)鏈上的每個服務(wù)組件都會產(chǎn)生日志,那么如何分析整個業(yè)務(wù)系統(tǒng)的日志呢?

老碼農(nóng)覺得ELK是日志分析平臺的一個上佳選擇。ELK由Elasticsearch、Logstash和Kibana三部分組件組成:Elasticsearch是個開源分布式搜索引擎,它的特點(diǎn)是分布式,零配置,自動發(fā)現(xiàn),索引自動分片,索引副本機(jī)制,restful風(fēng)格接口,多數(shù)據(jù)源,自動搜索負(fù)載等。Kibana 是一個開源和免費(fèi)的工具,可以為 Logstash 和 ElasticSearch 提供日志分析結(jié)果的Web可視化界面,匯總、分析和搜索重要數(shù)據(jù)日志。Logstash是一個完全開源的工具,可以對各種日志進(jìn)行收集、分析,并將其存儲供,logstash 的工作示意圖如下:

在ELK方案中,logstash 進(jìn)行日志采集和預(yù)處理,ES 完成分布式檢索,Kibaba 做最終的分析結(jié)果可視化。隨之需求的變化, 基于ELK 之上還有很多變種,例如引進(jìn)Kafka消息隊(duì)列,增加Storm 實(shí)時分析等等,都使得基于日志的應(yīng)用實(shí)現(xiàn)更大的價值化。

更進(jìn)一步,會形成統(tǒng)一日志平臺,逐漸形成業(yè)務(wù)系統(tǒng)的一部分,例如支持?jǐn)?shù)據(jù)的最終一致性等等。連自己都沒想到,日志居然如此的豐富多彩,還有很多有趣的問題,例如日志的動態(tài)開關(guān)配置,日志傳輸中的準(zhǔn)實(shí)時性,寫日志的性能損耗等等。

[[193823]]

綜上,log日志的紀(jì)錄和分析,不僅僅是一種全棧必備的技能,更是一種開發(fā)者的基本素養(yǎng)。

【本文來自51CTO專欄作者“老曹”的原創(chuàng)文章,作者微信公眾號:喔家ArchiSelf,id:wrieless-com】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2017-06-13 15:10:02

大數(shù)據(jù)Log日志

2020-07-20 08:23:04

Redis分布式系統(tǒng)

2017-04-06 10:27:01

JavaScript基礎(chǔ)Java

2017-10-12 14:24:24

2021-06-01 07:16:21

C語言基礎(chǔ)代碼

2023-12-10 20:30:51

SQL工具數(shù)據(jù)

2017-08-07 13:02:32

全棧必備貝葉斯

2017-04-12 14:45:20

數(shù)據(jù)架構(gòu)數(shù)據(jù)源

2015-08-17 09:27:51

全棧工程師Devops工具周期表

2017-12-18 15:33:56

Java基礎(chǔ)編程

2023-08-21 09:51:57

全棧軟件開發(fā)

2017-11-10 19:00:37

華為

2023-07-03 00:47:23

2013-12-09 09:42:50

JavaScript全棧式

2025-01-14 01:00:00

日志接口Log4j

2018-01-09 15:35:54

Python編程基礎(chǔ)

2017-07-05 11:09:35

華為開發(fā)云

2017-07-31 12:00:42

創(chuàng)業(yè)必備工具棧

2022-12-15 08:44:52

2022-07-26 07:47:14

架構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號