Shell-Script

在單個日誌中編譯所有顯示錯誤消息的 .log

  • August 23, 2019

我在 /var/opt/log_loc1、/var/opt/log_loc2、/var/opt/log_loc3 中有許多來自不同 cron 作業的生成日誌。除了查看每個日誌之外,有沒有辦法安排一個 cron 作業來填充新的日誌文件,其中包含所有包含錯誤消息的日誌?

基本上我想用“all_logs_%Y_%m_%d”作為名稱的新日誌文件填充所有日誌名稱和錯誤。每天,我都會有一個新的 all_logs_%Y_%m_%d

範例:這是我在 /var/opt/log_loc1 中的日誌文件列表

  1. InsertSales_2019_08_19.log
  2. PurgeHistory_2019_08_19.log
  3. 導入11_2019_08_19.log
  4. ImportSales_2019_08_19.log
  5. Import22_2019_08_20.log
  6. 導入33_2019_08_20.log
  7. InsertSales_2019_08_20.log
  8. PurgeHistory_2019_08_20.log
  9. 導入11_2019_08_20.log
  10. ImportSales_2019_08_20.log
  11. Import22_2019_08_21.log
  12. 導入33_2019_08_21.log
  13. InsertSales_2019_08_21.log
  14. PurgeHistory_2019_08_21.log

*抱歉,如果我的問題不完整

怎麼樣find?,我能想到的最簡單的方法是使用它,也許它有點粗糙但它必須完成這項工作

find /var/opt/ -type f -name "*.log" -exec grep -iH 'err\|warn\|fail\|whatever' {} >> total.log \;

我不清楚您是只想過濾所有日誌文件(從所有日子開始)還是從今天開始,如果您需要使用日期過濾,您可以使用-mtime選項 fromfind或者只是使用-name選項來過濾,例如,昨天的日誌

find /var/opt/ -type f -name "*_date –date yesterday ‘+%Y_%m_%d’.log" -exec grep -iH 'err\|warn\|fail\|whatever' {} >> total.log \;

不確定這是否可以幫助您…其他不清楚的是,日誌文件具有什麼樣的語法?因為find找不到字母或數字順序,所以你會得到一個混亂的文件。通常(並且必須是教條),日誌以 %Y%m%d_%H:%M 或類似的東西開頭,如果是這種情況,您可以像這樣的方式sort輸出find

find /var/opt/ -type f -name "*.log" -exec grep -iH 'err\|warn\|fail\|whatever' {} \; sort -no total.log

我嘗試了這個/var/log,看起來它可以完成這項工作,但正如我所說,這是一種粗糙的方式。

希望這可以幫到你。

你有更多關於我使用的選項的資訊findsort以及grepman頁面中。

引用自:https://unix.stackexchange.com/questions/536970