我的应用程序正在将消息写入 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) 的原因。但是当我们解析逗号分隔的列表时,我们不知道会有多少值?因此无法创建宏。
我已经浏览了这个链接,但没有帮助。
如果你们中的任何人都可以提出一些想法,那将非常有帮助。
先感谢您!