私のアプリケーションはsyslog-ngにメッセージを書き込んでおり、syslog-ngは着信メッセージを異なる列に分けることでこのメッセージをSQliteに保存しています。
私のアプリケーション ログの凡例は次のようになります。
unique-record-id usename date Quantity BOQ comma,separated,profiles Count Vendor applicable,vendor,categories known,request,types vendor_code credit
上記のメッセージには 12 個の値があり、それらはタブ (\t) で区切られています。これらの 12 個の値には、カンマ区切りの文字列を持つものがあります。これらのカンマ区切りの値はログ行ごとに異なる場合があり、4 列になることもあれば 2 列になることもありますが、テーブル内のカンマ区切り値の位置が固定されている場合は、6 列目、9 列目、10 列目などです。
サンプルログ行:
140189 "john@192.168.0.22" "03/Mar/2015:10:05:01" 1593 89 "apple,mango,banana" 15 "google" "fruits,games,social,business" "check,block" 123 50
次のパーサーを使用して、そのメッセージを SQLite テーブル (TABLE1) に解析できます。
parser p_tab_space {
csv-parser(columns("LOG.ID", "LOG.USERNAME", "LOG.DATE",
"LOG.QUANTITY", "LOG.BOQ", "LOG.PROFILES",
"LOG.COUNT", "LOG.VENDOR", "LOG.CATEGORIES",
"LOG.REQUESTS", "LOG.CODE","LOG.CREDIT")
delimiters("\t")
);
};
ここで、 LOG.PROFILES を別のテーブル (PROFILE_TABLE)に再度解析する必要があります。
id | profiles | quantity
1 | apple | 1593
2 | mango | 1593
3 | banana | 1593
同じように、別のテーブル(CATEGORY_TABLE、REQ_TABLE)の残りのカンマ区切りの値に対してこれを行う必要があります。
例 :
id | categories | quantity
1 | fruits | 1593
2 | games | 1593
3 | social | 1593
4 | business | 1593
ここでの問題は、カンマで区切られた値の数がわからないことです。
メインの入力メッセージは 12 個のタブで区切られた値で構成されていることがわかっているため、p_tab_space パーサーで 12 個の列 (MACROS) を作成しました。しかし、カンマ区切りのリストを解析している間、いくつの値が来るかわかりませんか? したがって、マクロを作成することはできません。
このリンクをたどりましたが、助けにはなりません。
あなたの誰かがいくつかのアイデアを投げることができれば、それはとても助けになるでしょう.
前もって感謝します!