JavaRequestLogTest.java 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package com.nokia.finance.tasks.requestlogs;
  2. import com.google.gson.Gson;
  3. import com.google.gson.reflect.TypeToken;
  4. import lombok.Data;
  5. import lombok.NoArgsConstructor;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.apache.commons.csv.CSVFormat;
  8. import org.apache.commons.csv.CSVPrinter;
  9. import org.apache.commons.csv.QuoteMode;
  10. import org.junit.jupiter.api.Test;
  11. import java.io.OutputStreamWriter;
  12. import java.nio.charset.StandardCharsets;
  13. import java.nio.file.Files;
  14. import java.nio.file.Paths;
  15. import java.time.LocalDateTime;
  16. import java.time.format.DateTimeFormatter;
  17. import java.util.HashMap;
  18. import java.util.Map;
  19. import java.util.regex.Matcher;
  20. import java.util.regex.Pattern;
  21. import java.util.stream.Stream;
  22. @Slf4j
  23. class JavaRequestLogTest {
  24. @Test
  25. void test() throws Exception {
  26. Gson gson = new Gson();
  27. Pattern pattern = Pattern.compile("调用记录: \\s*(.*)");
  28. Files.createDirectories(Paths.get("test/output"));
  29. try (Stream<String> stream = Files.lines(Paths.get("test/data/java-request-log.txt"));
  30. OutputStreamWriter osw = new OutputStreamWriter(Files.newOutputStream(Paths.get("test/output/java-request-log.csv")),
  31. StandardCharsets.UTF_8);
  32. CSVPrinter printer = new CSVPrinter(osw, CSVFormat.DEFAULT.builder().setQuoteMode(QuoteMode.ALL).build())
  33. ) {
  34. // 添加bom头避免excel乱码
  35. osw.write('\ufeff');
  36. printer.printRecord("request_time", "login_id", "page_url", "api", "request_parameters", "headers", "app_id", "time_stamp", "token");
  37. stream.forEachOrdered(line -> {
  38. Matcher matcher = pattern.matcher(line);
  39. if (matcher.find()) {
  40. String s = matcher.group(1);
  41. log.info(s);
  42. RequestLogBo bo = gson.fromJson(s, new TypeToken<>() {});
  43. Map<String, String> requestParameters = new HashMap<>();
  44. requestParameters.put("request_parameters", bo.getParameters());
  45. requestParameters.put("request_body", bo.getBody());
  46. try {
  47. printer.printRecord(
  48. LocalDateTime.parse(bo.getTime()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")),
  49. bo.getLOGIN_ID(),
  50. bo.getREQUEST_URL(),
  51. bo.getApi(),
  52. gson.toJson(requestParameters),
  53. bo.getHeaders(),
  54. bo.getAPP_ID(),
  55. bo.getTIME_STAMP(),
  56. bo.getToken()
  57. );
  58. } catch (Exception e) {
  59. throw new RuntimeException(e);
  60. }
  61. }
  62. });
  63. } catch (Exception e) {
  64. log.error(e.toString(), e);
  65. }
  66. }
  67. @NoArgsConstructor
  68. @Data
  69. public static class RequestLogBo {
  70. private String APP_ID;
  71. private String LOGIN_ID;
  72. private String TIME_STAMP;
  73. private String REQUEST_URL;
  74. private String api;
  75. private String body;
  76. private String time;
  77. private String headers;
  78. private String parameters;
  79. private String token;
  80. }
  81. }