我正在尝试使用Spring Batch将日志文件的内容导入数据库。
我目前正在使用FlatFileItemReader,但遗憾的是很多日志条目都没有捕获。两个主要问题是:
包含多行JSON字符串的行:
2012-03-22 11:47:35,307 DEBUG main someMethod(SomeClass.java:56): Do Something(18,true,null,null,null): my.json = '{
"Foo":"FooValue",
"Bar":"BarValue",
... etc
}'
包含堆栈跟踪的行
2012-03-22 11:47:50,596 ERROR main com.meetup.memcached.SockIOPool.createSocket(SockIOPool.java:859): No route to host
java.net.NoRouteToHostException: No route to host
at sun.nio.ch.Net.connect0(Native Method)
at sun.nio.ch.Net.connect(Net.java:364)
at sun.nio.ch.Net.connect(Net.java:356)
at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:623)
at sun.nio.ch.SocketAdaptor.connect(SocketAdaptor.java:92)
at com.meetup.memcached.SockIOPool$SockIO.getSocket(SockIOPool.java:1703)
at com.meetup.memcached.SockIOPool$SockIO.<init>(SockIOPool.java:1674)
at com.meetup.memcached.SockIOPool.createSocket(SockIOPool.java:850)
at com.meetup.memcached.SockIOPool.populateBuckets(SockIOPool.java:737)
at com.meetup.memcached.SockIOPool.initialize(SockIOPool.java:695)
基本上,我需要FlatFileItemReader继续读取,直到它到达下一个时间戳,同时聚合所有行。之前是否已完成此类任务(在Spring Batch中)
答案 0 :(得分:2)
现在有Spring Batch documentation解决此用例的常见问题解答。
答案 1 :(得分:1)
解决方案是编写一个自定义阅读器,回溯最后几行,并查找标记有效行开始的特定模式。我没有在Spring Batch中找到任何预先制作的内容,但我可以重用大量现有代码。该解决方案是专有的,所以我不能在这里发布,抱歉,但这是它的工作原理:
毋庸置疑,此解决方案明显慢于内置的FlatFileItemReader,但它可以获得正确的数据。