欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

7個Linux 命令輕松搞定線上Java日志管理難題

 更新時間:2025年07月15日 09:47:52   作者:程序員岳彬  
在線上Java應用的運維工作中,日志管理是至關重要的一環(huán),本文將針對這些常見難題,介紹7個實用的Linux命令,幫助你輕松搞定線上Java日志管理,希望對大家有所幫助

引言

在線上Java應用的運維工作中,日志管理是至關重要的一環(huán)。日志不僅能幫助我們排查故障、分析性能問題,還能為業(yè)務優(yōu)化提供數(shù)據(jù)支持。然而,線上Java日志常常會遇到各種難題,如日志文件過大、需要實時監(jiān)控、按條件過濾等。本文將針對這些常見難題,介紹7個實用的Linux命令,幫助你輕松搞定線上Java日志管理。

一、解決日志文件過大問題

線上Java應用經過長時間運行后,日志文件可能會變得非常龐大,動輒幾GB甚至幾十GB。這不僅會占用大量的存儲空間,還會給日志的傳輸、備份和分析帶來極大的不便。此時,我們可以借助split命令來解決這一問題。

split命令能夠將一個大文件按照指定的大小或行數(shù)分割成多個小文件,而且在分割過程中不會影響原日志文件的寫入,保證日志記錄不中斷。

其基本語法為:split [選項] 要分割的文件 分割后文件的前綴

常用選項:

  • -b:指定分割后每個文件的大小,單位可以是字節(jié)(默認)、KB(k)、MB(m)、GB(g)等。
  • -l:指定分割后每個文件的行數(shù)。

實例1:按大小分割日志文件

如果我們有一個名為app.log的Java日志文件,大小為500MB,我們想將其按100MB大小進行分割,可執(zhí)行以下命令:

split -b 100M app.log app_split_

上述命令中,-b 100M表示按100MB大小分割;app.log是要分割的日志文件;app_split_是分割后文件的前綴。

執(zhí)行該命令后,會生成一系列以app_split_開頭的文件,分別為app_split_aa、app_split_ab、app_split_ac、app_split_ad、app_split_ae,每個文件的大小不超過100MB(最后一個文件可能小于100MB)。

實例2:按行數(shù)分割日志文件

若我們希望按行數(shù)分割,比如每個文件包含1000行日志,命令如下:

split -l 1000 app.log app_line_split_

這里-l 1000表示每個分割后的文件包含1000行日志,分割后生成app_line_split_aa、app_line_split_ab等文件。

通過split命令分割后的小文件,更便于我們進行存儲、傳輸和分析。比如,我們可以只傳輸或分析其中某個時間段的日志片段,大大提高工作效率。同時,在進行日志備份時,也可以針對分割后的小文件進行操作,避免因單個大文件備份失敗而導致全部日志備份失敗的情況。

二、實時監(jiān)控日志輸出

在Java應用運行過程中,我們常常需要實時監(jiān)控日志輸出,以便及時發(fā)現(xiàn)應用運行中的錯誤、警告等信息。tail命令的-f參數(shù)能夠實時跟蹤文件內容的變化,非常適合用于實時監(jiān)控日志輸出。

tail命令的基本語法為:tail [選項] 文件名

常用選項:

  • -f:實時跟蹤文件內容的更新,當文件有新內容寫入時,會立即顯示在終端上。
  • -n:指定顯示文件末尾的行數(shù),默認顯示最后10行。

實例1:實時監(jiān)控日志文件

要實時監(jiān)控app.log日志文件的輸出,執(zhí)行以下命令:

tail -f app.log

執(zhí)行該命令后,終端會顯示app.log文件末尾的內容,并且會一直處于監(jiān)聽狀態(tài)。當應用有新的日志信息寫入app.log時,這些新信息會立即顯示在終端上,讓我們能夠實時了解應用的運行狀態(tài)。

實例2:實時監(jiān)控并只顯示錯誤信息

在實際應用中,我們可能更關注日志中的錯誤信息。此時,可以結合grep命令進行過濾,只顯示包含“ERROR”的日志行,命令如下:

tail -f app.log | grep "ERROR"

其中,grep "ERROR"用于從tail命令的輸出中過濾出包含“ERROR”的行。這樣,終端只會實時顯示app.log中新增的錯誤信息,方便我們及時發(fā)現(xiàn)和處理應用中的錯誤。

實例3:先顯示近期日志再實時監(jiān)控

如果我們想先查看日志文件末尾的100行內容,了解近期的應用運行情況,然后再進行實時監(jiān)控,可以使用-n參數(shù),命令如下:

tail -n 100 -f app.log

該命令會先顯示app.log文件末尾的100行日志,然后進入實時監(jiān)控狀態(tài),當有新的日志寫入時,繼續(xù)實時顯示。

通過tail命令的實時監(jiān)控功能,我們能夠及時掌握應用的運行動態(tài),快速響應和處理各種異常情況,保障應用的穩(wěn)定運行。

三、按條件過濾日志

在分析Java日志時,我們往往需要根據(jù)特定的條件過濾出有用的信息,比如根據(jù)關鍵詞、時間戳、錯誤類型等。grep命令是一個強大的文本搜索工具,能夠滿足我們按條件過濾日志的需求。

grep命令的基本語法為:grep [選項] 模式 文件名

常用選項:

  • -i:忽略模式中的大小寫,進行不區(qū)分大小寫的匹配。
  • -v:顯示不包含匹配模式的行。
  • -E:支持擴展的正則表達式。
  • -o:只顯示匹配模式的部分。
  • -r:遞歸搜索目錄下的所有文件。

實例1:過濾包含特定用戶ID的日志

假設我們要從app.log中過濾出包含用戶ID為“123456”的日志行,命令如下:

grep "123456" app.log

該命令會在app.log中搜索所有包含“123456”的行,并將這些行顯示在終端上。

實例2:過濾不包含“INFO”的日志行

如果我們想排除日志中的信息級別的日志,只查看其他級別的日志(如警告、錯誤等),可以使用-v選項,命令如下:

grep -v "INFO" app.log

此命令會顯示app.log中所有不包含“INFO”的日志行。

實例3:過濾符合正則表達式的日志

若要過濾出日志中符合特定正則表達式的內容,比如匹配郵箱地址的日志行,可以使用-E選項,命令如下:

grep -E "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}" app.log

該命令會從app.log中過濾出所有包含郵箱地址格式的日志行。

實例4:在多個日志文件中過濾

如果我們要在多個日志文件中過濾包含“Exception”的日志行,可以指定多個文件名,命令如下:

grep "Exception" app.log app_error.log

此命令會在app.logapp_error.log兩個文件中搜索包含“Exception”的行,并將結果顯示出來。

通過grep命令的靈活使用,我們可以快速從海量的日志信息中過濾出符合條件的內容,大大提高日志分析的效率,幫助我們更快地定位問題。

四、統(tǒng)計日志事件頻率

統(tǒng)計日志中各類事件的發(fā)生頻率,能夠幫助我們了解應用的運行狀況,比如某個錯誤出現(xiàn)的次數(shù)、某個接口被調用的頻率等。awk命令是一個強大的文本處理工具,非常適合用于日志事件頻率的統(tǒng)計。

awk命令的基本語法為:awk '腳本' 文件名

awk腳本的基本結構為:模式 {動作},其中模式用于指定要處理的行,動作用于指定對匹配行執(zhí)行的操作。

實例1:統(tǒng)計不同錯誤類型的出現(xiàn)次數(shù)

假設app.log中記錄了各種錯誤類型,如“NullPointerException”、“IndexOutOfBoundsException”等,我們要統(tǒng)計每種錯誤類型出現(xiàn)的次數(shù),可執(zhí)行以下命令:

awk '/Exception/ {count[$0]++} END {for (error in count) print error, count[error]}' app.log

腳本解釋:

  • /Exception/:模式,表示只處理包含“Exception”的行。
  • {count[$0]++}:動作,定義一個關聯(lián)數(shù)組count,以整行內容($0表示整行)為鍵,每遇到一行包含“Exception”的行,就將對應鍵的值加1。
  • END {for (error in count) print error, count[error]}:END模式表示在處理完所有文件內容后執(zhí)行后面的動作,這里通過循環(huán)遍歷關聯(lián)數(shù)組count,打印出每種錯誤類型及其出現(xiàn)的次數(shù)。

實例2:統(tǒng)計某個接口被調用的次數(shù)

如果日志中記錄了接口調用信息,格式為“[時間] 接口名: /api/user/get”,我們要統(tǒng)計/api/user/get接口被調用的次數(shù),命令如下:

awk '/\/api\/user\/get/ {count++} END {print "調用次數(shù):", count}' app.log

腳本解釋:

  • /\/api\/user\/get/:模式,由于“/”在正則表達式中有特殊意義,所以需要用“\”轉義,該模式表示只處理包含“/api/user/get”的行。
  • {count++}:動作,定義一個變量count,每遇到一行匹配的行,就將count的值加1。
  • END {print "調用次數(shù):", count}:處理完所有內容后,打印出/api/user/get接口的調用次數(shù)。

實例3:按小時統(tǒng)計日志中錯誤的發(fā)生次數(shù)

若日志中的時間格式為“2025-07-14 10:30:22”,我們要按小時統(tǒng)計錯誤(包含“ERROR”)的發(fā)生次數(shù),命令如下:

awk '/ERROR/ {hour = substr($1, 1, 13)" "substr($2, 1, 2); count[hour]++} END {for (h in count) print h, count[h]}' app.log | sort

腳本解釋:

  • /ERROR/:模式,只處理包含“ERROR”的行。
  • {hour = substr($1, 1, 13)" "substr($2, 1, 2); count[hour]++}:動作,substr函數(shù)用于截取字符串,substr($1, 1, 13)截取日期部分的前13個字符(即“2025-07-14”),substr($2, 1, 2)截取時間部分的前2個字符(即小時),將它們拼接成“2025-07-14 10”這樣的小時格式,作為關聯(lián)數(shù)組count的鍵,每遇到一行匹配的行,就將對應鍵的值加1。
  • END {for (h in count) print h, count[h]}' app.log | sort:處理完所有內容后,打印出每個小時及其對應的錯誤發(fā)生次數(shù),并通過sort命令進行排序,使結果按時間順序顯示。

通過awk命令的統(tǒng)計功能,我們可以從日志中提取出有價值的統(tǒng)計信息,為應用的性能優(yōu)化、故障排查和業(yè)務分析提供有力的數(shù)據(jù)支持。

五、追蹤日志上下文

在分析日志中的錯誤或異常時,僅僅查看錯誤所在的行往往不夠,我們還需要了解該錯誤發(fā)生前后的日志信息,即日志的上下文。grep命令的-C、-A-B參數(shù)可以幫助我們實現(xiàn)這一需求。

  • -C n:顯示匹配行及其前后各n行的內容。
  • -A n:顯示匹配行及其后n行的內容。
  • -B n:顯示匹配行及其前n行的內容。

實例1:查看包含“Exception”的行及其前后5行

要查看app.log中包含“Exception”的行及其前后5行的內容,執(zhí)行以下命令:

grep -C 5 "Exception" app.log

執(zhí)行該命令后,終端會顯示所有包含“Exception”的行,以及每個匹配行前面5行和后面5行的日志內容,幫助我們全面了解錯誤發(fā)生的上下文環(huán)境。

實例2:查看包含“ERROR”的行及其后10行

如果我們想了解某個錯誤發(fā)生后的后續(xù)日志情況,查看包含“ERROR”的行及其后10行的內容,命令如下:

grep -A 10 "ERROR" app.log

此命令會顯示包含“ERROR”的行,以及每個匹配行后面10行的日志內容,便于我們追蹤錯誤發(fā)生后的應用行為。

實例3:查看包含“Warning”的行及其前8行

若要了解某個警告發(fā)生前的日志信息,查看包含“Warning”的行及其前8行的內容,命令如下:

grep -B 8 "Warning" app.log

該命令會顯示包含“Warning”的行,以及每個匹配行前面8行的日志內容,幫助我們分析警告發(fā)生的原因。

通過追蹤日志上下文,我們能夠更全面地了解錯誤或異常發(fā)生的背景和過程,從而更快速、準確地定位問題的根源。

六、恢復誤刪日志

在操作過程中,誤刪日志文件是一件很棘手的事情,但如果刪除后應用進程還在繼續(xù)運行(即文件描述符未被釋放),我們可以借助lsof命令來恢復誤刪的日志文件。

lsof命令用于列出當前系統(tǒng)中打開的文件,其基本語法為:lsof [選項]

常用選項:

  • -p:指定進程ID,只顯示該進程打開的文件。
  • -c:指定進程名,只顯示該進程打開的文件。

實例:恢復誤刪的app.log日志文件

  • 首先,確定正在寫入app.log日志文件的Java進程ID??梢允褂胘ps命令查看Java進程,或者使用ps -ef | grep java命令,假設進程ID為12345。
  • 執(zhí)行lsof -p 12345命令,查看該進程打開的文件,在輸出結果中找到被刪除的app.log文件,其狀態(tài)會顯示為“deleted”,同時會有一個文件描述符(如fd 3)。
  • 執(zhí)行以下命令恢復文件:
cp /proc/12345/fd/3 app.log

其中,/proc/12345/fd/3是被刪除文件的文件描述符路徑,通過將其復制到原文件名app.log,即可恢復誤刪的日志文件。

需要注意的是,這種恢復方法僅適用于文件被刪除后,進程仍然在運行且未釋放文件描述符的情況。如果進程已經停止或文件描述符已被釋放,那么通過lsof命令可能無法恢復誤刪的日志文件。因此,在日常操作中,我們要謹慎刪除日志文件,最好先進行備份。

七、日志脫敏處理

日志中可能包含大量的敏感信息,如用戶手機號、身份證號、銀行卡號等。為了保護用戶隱私和數(shù)據(jù)安全,我們需要對這些敏感信息進行脫敏處理。sed命令是一個強大的文本替換工具,可以用于日志的脫敏處理。

sed命令的基本語法為:sed [選項] '腳本' 文件名

常用選項:

  • -i:直接修改文件內容,而不是輸出到終端。
  • -e:指定要執(zhí)行的腳本。

實例1:對手機號進行脫敏

如果日志中包含手機號(格式為11位數(shù)字),我們將其替換為“***”,命令如下:

sed -i 's/1[3-9][0-9]\{9\}/*** /g' app.log

腳本解釋:

  • s/原內容/替換內容/g:sed的替換命令,s表示替換,g表示全局替換,即一行中所有匹配的內容都會被替換。
  • 1[3-9][0-9]\{9\}:正則表達式,匹配11位手機號,其中“1”表示手機號開頭為1,“[3-9]”表示第二位為3-9中的任意一個數(shù)字,“[0-9]{9}”表示后面跟9位數(shù)字。
  • ***:替換后的內容。

執(zhí)行該命令后,app.log中所有的手機號都會被替換為“***”。

實例2:對身份證號進行脫敏

身份證號為18位數(shù)字或17位數(shù)字加一個大寫字母X,我們將其替換為“******************”,命令如下:

sed -i 's/[1-9][0-9]\{16\}[0-9X]/******************/g' app.log

腳本解釋:

  • [1-9][0-9]\{16\}[0-9X]:正則表達式,匹配18位身份證號,“[1-9]”表示第一位為1-9中的任意一個數(shù)字,“[0-9]{16}”表示中間16位為數(shù)字,“[0-9X]”表示最后一位為數(shù)字或X。
  • ******************:替換后的內容,共18個星號,與身份證號長度一致。

實例3:對銀行卡號進行脫敏(保留前4位和后4位)

銀行卡號通常為16-19位數(shù)字,我們將中間的數(shù)字替換為“****”,命令如下:

sed -i 's/\([0-9]\{4\}\)[0-9]\{8,11\}\([0-9]\{4\}\)/\1****\2/g' app.log

腳本解釋:

  • \([0-9]\{4\}\):捕獲組1,匹配前4位數(shù)字。
  • [0-9]\{8,11\}:匹配中間的8-11位數(shù)字(因為16-4-4=8,19-4-4=11)。
  • \([0-9]\{4\}\):捕獲組2,匹配后4位數(shù)字。
  • \1****\2:替換后的內容,\1表示引用捕獲組1的內容,\2表示引用捕獲組2的內容,中間用“****”替換。

通過sed命令的脫敏處理,我們可以有效地保護日志中的敏感信息,防止信息泄露,符合數(shù)據(jù)安全和隱私保護的相關規(guī)定。

總結

線上Java日志管理雖然面臨著諸多難題,但借助split、tail、grep、awk、lsof、sed等Linux命令,我們可以輕松應對。這些命令功能強大、使用靈活,能夠幫助我們解決日志文件過大、實時監(jiān)控、按條件過濾、統(tǒng)計事件頻率、追蹤上下文、恢復誤刪日志和脫敏處理等問題。

以上就是7個Linux 命令輕松搞定線上Java日志管理難題的詳細內容,更多關于Linux日志管理的資料請關注腳本之家其它相關文章!

相關文章

  • 在linux中用同一個版本的R 同時安裝 Seurat2 和 Seurat3的教程

    在linux中用同一個版本的R 同時安裝 Seurat2 和 Seurat3的教程

    這篇文章主要介紹了在linux中用同一個版本的R 同時安裝 Seurat2 和 Seurat3的教程,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • centos6.8下hadoop3.1.1完全分布式安裝指南(推薦)

    centos6.8下hadoop3.1.1完全分布式安裝指南(推薦)

    這篇文章主要介紹了centos6.8下hadoop3.1.1完全分布式安裝指南,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • Linux 使用init命令實現(xiàn)關機,重啟,切換模式

    Linux 使用init命令實現(xiàn)關機,重啟,切換模式

    這篇文章主要介紹了Linux 使用init命令實現(xiàn)關機,重啟,切換模式的相關資料,需要的朋友可以參考下
    2017-03-03
  • Linux利用Sysctl命令調整內核參數(shù)

    Linux利用Sysctl命令調整內核參數(shù)

    Sysctl指令是對系統(tǒng)核心參數(shù)的設置,下面這篇文章主要給大家介紹了關于Linux利用Sysctl命令調整內核參數(shù)的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2018-01-01
  • Linux中ifconfig命令查不到IP的問題及解決

    Linux中ifconfig命令查不到IP的問題及解決

    這篇文章主要介紹了Linux中ifconfig命令查不到IP的問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Linux (Ubuntu 18.04) 下安裝vim編輯器的方法

    Linux (Ubuntu 18.04) 下安裝vim編輯器的方法

    這篇文章主要介紹了Linux (Ubuntu 18.04) 下安裝vim編輯器的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • linux 下隱藏進程的一種方法及遇到的坑

    linux 下隱藏進程的一種方法及遇到的坑

    這篇文章主要介紹了linux 下隱藏進程的一種方法,主要實現(xiàn)思路就是利用 LD_PRELOAD 來實現(xiàn)系統(tǒng)函數(shù)的劫持,具體實現(xiàn)代碼,需要的朋友可以參考下
    2018-09-09
  • 詳解CentOS如何使用NTP同步時間服務器

    詳解CentOS如何使用NTP同步時間服務器

    在Linux系統(tǒng)中,時間同步對于各種應用是非常關鍵的,例如,系統(tǒng)日志和許多監(jiān)控應用程序都需要在多個服務器之間保持時間同步,NTP協(xié)議是一種常見的協(xié)議,它使得您可以在系統(tǒng)之間同步時間,下面我們將詳細討論CentOS如何使用NTP同步時間服務器,需要的朋友可以參考下
    2023-11-11
  • apache偽靜態(tài)與iis偽靜態(tài)規(guī)則與配置區(qū)別介紹

    apache偽靜態(tài)與iis偽靜態(tài)規(guī)則與配置區(qū)別介紹

    本文章來總結一下關于apache偽靜態(tài)與iis偽靜態(tài)區(qū)別介紹,主要講到了一些規(guī)則的問題與配置區(qū)別,以后大家就可以直接在iis偽靜態(tài)轉換apache,反之也很簡單哦,需要了解的碰可以參考下
    2012-12-12
  • linux防火墻配置(基于yum倉的配置)詳細步驟

    linux防火墻配置(基于yum倉的配置)詳細步驟

    大家好,本篇文章主要講的是linux防火墻配置(基于yum倉的配置)詳細步驟,感興趣的同學快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-11-11

最新評論