我正在尝试使用 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 中)
最佳答案
Spring Batch documentation 中现在有一个常见问题解答解决这个用例。
关于java - Spring 批处理 : How to process multi-line log files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9939851/