逐行读取日志文件



我正在尝试逐行读取文件,并查找包含字符串"Inside/buyairtime",然后从该行获取AppSessionId,之后使用AppSessionId获取下一行中的requestBody并检索transactionId。

我能够读取文件并获得AppSessionId,但我无法获得"requestbody",请提供任何帮助将不胜感激。

这是我试过的。

try(BufferedReader br = new BufferedReader(fileReader)) {
br.lines().forEach((line) -> {
if (line.contains("Inside /buyairtime")) {
String[] item = line.split("\|");
String AppSessionId = item[1].trim();
logger.info("SessionId =" + sessionId + " AppSessionId =" + AppSessionId);
if (line.contains(AppSessionId) && line.contains("requestBody")) {
String[] request = line.split("\|");
String requestBody = request[2].replace("#", "").trim();
logger.info("SessionId =" + sessionId + " requestBody =" + requestBody);
}
}
});
} catch (IOException e) {
e.printStackTrace();
}

示例:下面是读取

的行示例
[http-nio-8090-exec-66] g.c.v.M.controller.ApiController         : AppSessionId | MB-9672588DE0304D7 | ######## Inside /buyairtime Route
g.c.v.M.controller.ApiController         : AppSessionId | MB-9672588DE0304D7 | ######## requestBody = {"amount":"4.0","msisdn":"233200906179","transactionid":"0000001853861312"}
g.c.v.M.controller.ApiController         : AppSessionId | MB-9672588DE0304D7 | ######## Client IP = 127.0.0.1

这里是文件

部分的图像

我会将整个代码更改为像这样的非forEach循环(考虑到下一行)有请求正文!)

try(BufferedReader br = new BufferedReader(fileReader))
{
for(String line = br.readLine(); line != null; line = br.readLine())
{
if (line.contains("Inside /buyairtime"))
{
String[] item = line.split("\|");
String AppSessionId = item[1].trim();
logger.info("SessionId =" + sessionId + " AppSessionId =" + AppSessionId);
line = br.readLine(); // Jump to the next line
if (line.contains(AppSessionId) && line.contains("requestBody"))
{
String[] request = line.split("\|");
String requestBody = request[2].replace("#", "").trim(); // Replace everything and get only the request body...
logger.info("SessionId =" + sessionId + " requestBody =" + requestBody);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}

正如你所看到的,我跳到下一行来获得ReqBody,你的逻辑之前是不正确的,因为你应该同时读取这两行。

最新更新