かつて、私はログをたくさん扱う必要がありました。それらは大きく、異なるサーバー上にある可能性があります。特定のものを見つけるのではなく、システムが正常に動作しない理由を理解する必要がありました。何らかの理由で、ログアグリゲーターがありませんでした。
Linuxコンソールのlessコマンドのように、ローカルマシンにダウンロードせずに、いつでもファイルを開くことができるログビューアが必要でした。しかし同時に、IDEのように便利なテキストの強調表示があり、さまざまなパラメーターでレコードをフィルタリングする必要があります。フィルタリングと検索は、grepのように行ではなく、ログ内のイベントによって機能する必要があります。これは、スタックトレースのエラーなど、複数行のエントリがある場合に重要です。また、ファイルが異なるノードにある場合でも、1つのページで複数のファイルのレコードを一度に表示し、タイムスタンプに従ってそれらをフリーズすることができるはずです。
そして、私はそのようなユーティリティを作る方法を考え出しました!
Log Viewer - web-, , , Web . , , , , . .
« ? c ». , , 1 3,5, . , , , , , . .
, ; severity , .
, , «+» «…» , , , . . . Java IDE.
: «~.SecurityManager». , «~».
, . , . , Ctrl+C, , .
, , , :
. , , . . , severity, UI :
Severity filter
. , « ». , . , .
« » « », . .
JavaScript. true false.
JavaScript
function isVisibleEvent(text, fields) {
var match = text.match(/Task completed, elapsed time: (\d+)ms$/)
if (!match)
return false // Don't show events not matched the pattern
var time = parseInt(match[1])
return time > 500 // Show only events where elapsed time is more than a threshold
}
, . , , . , , , .
URL, .
,
- — , , , , , , ..
, .
, . , . . , . . log4j, logback . , — issue GitHub, .
— . «.log» , . :
logs = [
{
path: "/opt/my-app/logs/*.log"
},
{
path: ${HOME}"/work/**"
}
]
.log /opt/my-app/logs ~/work .
, — , . , . , Log Viewer. web UI , , Log Viewer LogViewer . - .
. , , « N », N — . , N . , « N T», T — . . , . , / T, , . , . .
, UI , URL :
http://localhost:8111/log?path=/opt/my-app/logs/a.log@hostname1&path=/opt/my-app/logs/b.log@hostname1&path=/opt/my-app/logs/c.log@hostname2
"path" , "@" , . . "@" — . URL, , log-paths = { … }
.
Log Viewer Java Web , . . Maven/Gradle spring context. , log viewer . UI /logs, . Log4j Logback.
, — discussions GitHub.
, . , . , , .
UI. , JSON, , . severity , .
サーバーのポートを開いてログを表示する方法がない場合があります。SSHアクセスしかありません。SSH経由で作業をサポートできます。Web UIはローカルマシンで起動し、SSH経由でサーバーに接続し、そこで特別なエージェントを起動します。エージェントは、入力ストリームを介してコマンドを受け入れ、出力ストリームを介してログの必要な部分を返します。
フィードバックをお待ちしております。
GitHubのプロジェクト:https://github.com/sevdokimov/log-viewer