2011-06-26 10 views
0

私は%d ...変換パターンでlog4jを使用しています。これにより、すべてのログメッセージがタイムスタンプで始まるようになります(2011-06-26 14:34:16,357)。私は提出する各SQLクエリを記録します。ログから実行時間を分析する方法は?

私は

がどのようにこの近づくだろう... SQLクエリ間のデルタ、および最大時間や平均時間を正確に同じSQLクエリの多分集約複数の実行を分析したいと思いますか? grepといくつかの優れた作業を使っていますか?私の人生を楽にする共通の方法/ツール/スクリプトがありますか?

P.S.物事がもっと迷惑にするために、私のSQL文は、マルチラインがあるので、log4jdbc sqltimingロガーはそうのようにそれらを出力します。

2011-06-26 14:43:32,112 [SelectCampaignTask ] INFO : jdbc.sqltiming - CREATE INDEX idx ON tab CRLF 
USING btree (id1, id2, emf); {executed in 34788 msec} 

答えて

0

私は定期的に使用してログを離れて選ぶためにGroovyの/ Perlの/ Pythonスクリプトを書くように誘惑されるだろう表現。

出力をCSVにダンプする場合は、確かにデータマインにExcelを使用できます。

代わりに、DateTime、スレッド、カテゴリレベル、およびログメッセージをデータベーステーブルに書き込むこともできます。レポートを書くためのSQLクエリを書くことは、フィルターなどの時間範囲を含むカスタムレポートを生成するための本当に簡単な方法です。

マイニングログファイルは、ほとんどの開発者にとって通例のようです。スクリプト言語...

+0

合意。 pythonスクリプトは仕事をすることができます。しかし、今のところ私はいくつかのレンガとモルタルのシェルコマンドを使ってやることにしました: 'grep sqlonly my.log | grepフォーマット| cut -d "" -f1,2,9-' – ihadanny

0

私はちょうどPythonで小さなスクリプトを書くことで同じ問題を解決しました。私はPythonの全く新しい初心者で、2時間もかからずに作業できるようになりました。ここで

私のコードの重要な部分です:

import re 
logfile = open("jdbcPerf.log", "r").readlines() 
#extract the interesting lines 
for line in logfile: 
    m= re.search('^((\d+)-(\d+)-(\d+)) | ({executed)', line) 
    if m: 
     print m.group() 
#extract name of servlet and execution time 
for line in selectedLines: 
    #extract servlet name 
    m = re.search('servlets.([a-zA-Z]*).([a-zA-Z]*)', line) 
    if m: 
     print m.group()    
    #extract execution time 
    m = re.search('(\d+)',line) 
    if m: 
     print m.group() 

あなたは、あなたが必要なものは何でも、データ集計を行うにスケルトンとしてこれを使用することができます。

私のログファイルには、次のようになります。

2013-05-26 08:22:10,583 DEBUG [jdbc.sqltiming] 
com.myclass.servlets.BrowseCategories.categoryList(null:-1) 
16. select category0_.id as id, category0_.name as name from categories category0_ 
{executed in 7 msec} 
1

LogMXは、日付を解析し、複数行のログイベントを処理しながら、CSVに任意のログファイルをエクスポートすることができ、ログビューアツールです。また、(GUIで)複数のログイベント間の経過時間を計算することもできます。

これを行うには、まずLog4jパターンまたは正規表現を使用して(LogMXで)ログフォーマットを記述する必要があります。

PS:このツールを使用してコマンドラインからログファイルをエクスポートできます(コンソールモードが用意されています)。

関連する問題