将日志数据转换为json文档以存储在MongoDB中

时间:2014-01-16 12:22:44

标签: json mongodb log4j

我有从远程计算机下载的日志文件(Log4j)。我的要求是将这些文件的内容存储到mongodb。我选择mongodb,因为它是架构较少的数据存储,因此非常适合存储日志数据。我的查询是如何将日志数据转换为json文档并将其存储在mongodb中?我可以根据正则表达式拆分每个日志条目并将其存储在一个对象中,然后将其保存到mongo,但我有一种直觉,有更好的方法可以做到这一点。我在这里谈论的日志文件是最大的50mb的大小。 这是一个清理日志文件的样子:

2014-01-11T17:18:52.656260-08:00 localhost local0: Localhost 17:18:52.655 [INFO ] [..... | Timer-1 ] - asldknluenfbayewbfayewbdaiybdaiywbayhwbdsaas
2014-01-11T13:18:52.657649-08:00 localhost local0: Localhost 17:18:52.657 [INFO ] [..... | Timer-1 ] - dasdasldukjbfksbdfkajsnbdkasaasdasdasdasdasd
2014-01-11T13:18:52.659029-08:00 localhost local0: Localhost 17:18:52.658 [WARN ] [..... | Timer-1 ] - fjdshfaushdaksbdkasudhaksudbaksdbaksdasdasd
2014-01-11T56:18:52.661312-08:00 localhost local0: Localhost 17:18:52.660 [INFO ] [..... | Timer-1 ] - java.util.ConcurrentModificationException at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:365) at java.util.LinkedHashMap$KeyIterator.next(LinkedHashMap.java:376) at java.util.AbstractCollection.toArray(AbstractCollection.java:126) at java.util.ArrayList.addAll(ArrayList.java:473) at a.b.c.etc.SomeWrapper.rebuild(SomeWraper.java:109) at a.b.c.etc.SomeCaller.updateCache(SomeCaller.java:421)
2014-01-11T17:18:52.661751-08:00 localhost local0: Localhost 17:18:52.661 [FATAL] [..... | Timer-1 ] - sdfsdfsdfsdfsdfsdfsdfsasdasdasdasdasdasdasd
2014-01-11T17:18:52.663283-08:00 localhost local0: Localhost 17:18:52.662 [ERROR] [..... | Timer-1 ] - sdasdasdasdas

我会根据日期范围和日志级别来查询数据,因此这些是我想要的两个字段以及用于保存数据的字段。 任何想法/帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我不知道一些json-appender。但也许logstash是你的朋友。它将监视您的logdir并将文件泵入mongodb(请参阅http://logstash.net/docs/1.3.2/outputs/mongodb)。