查看日誌的高效率環境

查看日誌的高效率環境

目前我正在使用tail -f它來查看日誌。

有沒有更有效/可讀/更好的方式來查看日誌?

答案1

是的!perl代表實用提取和研究語言

而不是使用shell語法,例如:

tail -f file | grep --line-buffered someting

或者

tail -f file | sed -une '/someting/{s/^.*:/doing some formatting/;p}'

(註:--line-bufferedin grep,像-uin一樣sed有助於防止透過固定大小的方塊進行緩衝

對於查看/瀏覽日誌,perl語言。

根據還在等什麼...您可能需要建立一個小腳本來完全滿足您的需求。

您可能會在 perlfaq 中找到一些可用的範例,例如perldoc perlfaq5(或man perlfaq5如果您還沒有安裝perldoc),有一個問題:如何在 Perl 中執行“tail -f”?我在哪裡採取了這個:

第一次嘗試

seek(GWFILE, 0, 1);

該語句seek(GWFILE, 0, 1)不會更改目前位置,但它會清除句柄上的檔案結束條件,以便下一個語句<GWFILE>可以讓 Perl 再次嘗試讀取某些內容。

如果這不起作用(它依賴於你的 stdio 實現的功能),那麼你需要更多類似這樣的東西:

for (;;) {
    for ($curpos = tell(GWFILE); <GWFILE>; $curpos = tell(GWFILE)) {
      # search for some stuff and put it into files
    }
    # sleep for a while
    seek(GWFILE, $curpos, 0);  # seek to where we had been
  }

我已經多次使用它來觸發特殊情況。

示範版

作為示例,有一個quick and dirty 即時日誌計數器嘗試一下! (需讀取權限/var/log/syslog;-):

#!/usr/bin/perl -w
my %counter;

open FH, "</var/log/syslog" or die;
my $curpos = ( stat FH )[7];
seek( FH, $curpos, 0 );

for ( ; ; ) {
    for ( $curpos = tell(FH) ; <FH> ; $curpos = tell(FH) ) {
        $counter{$3}++ if /^(\S+\s+){4}(\S+\/|)([^\/\[:]*)[\[:]/;
    }
    syswrite STDOUT, sprintf "\r%s\e[K",
      join( ", ", map { sprintf "%s:%s", $_, $counter{$_} } keys %counter );
    select undef,undef,undef,1;
    seek( FH, $curpos, 0 );
}

會產生一行,每秒自動刷新,包含所有看到的守護程式的名字和每個人的計數器:

smtp:6, pop3d-ssl:13, local:6, imapd:8, smtpd:30, CRON:5, pickup:1, named:1

答案2

正如 F. Hauri 所建議的那樣,您可以使用 perl 來格式化輸出。

為了我的使用,我在 my 中為 tail 建立了一個別名~/.bashrc來讀取 Glassfish 的日誌。它非常簡單(一行),並對我的輸出進行著色以強調錯誤/警告行:

tail-color() {
    tail $* | perl -p -e 's/(.*WARN.*)/\033[31;43;1m$1\033[0m\007/g;' -e 's/(.*ERROR.*)/\033[33;41;1m$1\033[0m\007/g;' -e 's/(.*SEVERE.*)/\033[33;41;1m$1\033[0m\007/g'
}
  1. -p:將腳本包裝在循環內並輸出處理後的行
  2. -e 's/(.*WARN.*)/\033[31;43;1m$1\033[0m\007/g;'為包含“WARN”的每一行著色
    • \033[開始轉義序列(啟用格式化)
    • 31表示紅色前景
    • 43表示黃色背景
    • 1啟用粗體字符
    • m關閉轉義序列
    • $1包括輸入線
    • \033[0m是在輸出行後將預設格式還原為標準的第二個序列
    • \007嘟嘟聲
  3. -e 's/(.*ERROR.*)/\033[33;41;1m$1\033[0m\007/g;'為包含“ERROR”的每一行著色;唯一的區別在於顏色:
    • 31表示黃色前景
    • 43表示紅色背景

就我而言,我打開了可視鈴,因此我的螢幕在出現錯誤時閃爍(並且我的揚聲器不會發出蜂鳴聲),並且可以非常快速地檢測到錯誤/警告線。

您可以獲得以下方面的更多資訊:

同樣,正如 F. Hauri 在他的回答中解釋的那樣,借助 Perl,您可以做很多事情,因此您可以根據需要「開發」自己的日誌閱讀器。

相關內容