1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package com.nokia.finance.tasks.requestlogs;
- import com.google.gson.Gson;
- import com.google.gson.reflect.TypeToken;
- import lombok.Data;
- import lombok.NoArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.csv.CSVFormat;
- import org.apache.commons.csv.CSVPrinter;
- import org.apache.commons.csv.QuoteMode;
- import org.junit.jupiter.api.Test;
- import java.io.OutputStreamWriter;
- import java.nio.charset.StandardCharsets;
- import java.nio.file.Files;
- import java.nio.file.Paths;
- import java.time.LocalDateTime;
- import java.time.format.DateTimeFormatter;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import java.util.stream.Stream;
- @Slf4j
- class JavaRequestLogTest {
- @Test
- void test() throws Exception {
- Gson gson = new Gson();
- Pattern pattern = Pattern.compile("调用记录: \\s*(.*)");
- Files.createDirectories(Paths.get("test/output"));
- try (Stream<String> stream = Files.lines(Paths.get("test/data/java-request-log.txt"));
- OutputStreamWriter osw = new OutputStreamWriter(Files.newOutputStream(Paths.get("test/output/java-request-log.csv")),
- StandardCharsets.UTF_8);
- CSVPrinter printer = new CSVPrinter(osw, CSVFormat.DEFAULT.builder().setQuoteMode(QuoteMode.ALL).build())
- ) {
- // 添加bom头避免excel乱码
- osw.write('\ufeff');
- printer.printRecord("request_time", "login_id", "page_url", "api", "request_parameters", "headers", "app_id", "time_stamp", "token");
- stream.forEachOrdered(line -> {
- Matcher matcher = pattern.matcher(line);
- if (matcher.find()) {
- String s = matcher.group(1);
- log.info(s);
- RequestLogBo bo = gson.fromJson(s, new TypeToken<>() {});
- Map<String, String> requestParameters = new HashMap<>();
- requestParameters.put("request_parameters", bo.getParameters());
- requestParameters.put("request_body", bo.getBody());
- try {
- printer.printRecord(
- LocalDateTime.parse(bo.getTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")),
- bo.getLOGIN_ID(),
- bo.getREQUEST_URL(),
- bo.getApi(),
- gson.toJson(requestParameters),
- bo.getHeaders(),
- bo.getAPP_ID(),
- bo.getTIME_STAMP(),
- bo.getToken()
- );
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
- });
- } catch (Exception e) {
- log.error(e.toString(), e);
- }
- }
- @NoArgsConstructor
- @Data
- public static class RequestLogBo {
- private String APP_ID;
- private String LOGIN_ID;
- private String TIME_STAMP;
- private String REQUEST_URL;
- private String api;
- private String body;
- private String time;
- private String headers;
- private String parameters;
- private String token;
- }
- }
|