Regex Parsing Kafka Listener - PullRequest
       3

Regex Parsing Kafka Listener

1 голос
/ 17 марта 2019

Я слушаю тему Кафки и получаю сообщения, сравниваю их с объектом и затем пытаюсь разобрать сообщение.Я получаю несколько сообщений об одном поиске, и я просто пытаюсь получить этот


userName:User.Name userId:FDF3JH4 session:9cf2-21-c6-28-c360f1edba53 searchString:test, searchType:DEFAULT_SEARCH, и это то, что я хочу, мой


LogPattern должен быть String logPattern = ".*(userName:)(\\S+)\\s(userId:)(\\S+)\\s(session:)(\\S+)\\s(searchString:)([^,]).*";

    if (isValidObject) {
        final Pattern p = Pattern.compile(logPattern);
        Matcher matcher = p.matcher(historyRequest.getLog());

        if (!matcher.matches()) {
            return;
        }

Я настроил тестовую функцию, чтобы убедиться, что полученное сообщение и мой шаблон верны, но когда я помещаю его в реальную функцию, он не работает.Он не дает результатов для String logPattern = ".*"; Но странно то, что, возившись с шаблонами журналов, я смог получить совпадение сообщения kafka с этим шаблоном журнала и этим журналом:


String logPattern = ".*[userName]\\:(\\S+)\\s\\w+:(\\S+)(\\s\\S+\\s\\w+\\:)([^,]+).*";


userName:User.Name userId:D394H4 session:3f1da-0c-fb-90-949a searchString:"test" took:13.0 page:1 resultSize:1 sponsored:false

1 Ответ

0 голосов
/ 17 марта 2019

Насколько я могу судить, у вас был соответствующий шаблон. Я предполагаю, что он не сделал именно то, что вы хотели, потому что он не принял аргумент searchString. Я разместил код ниже со слегка измененной версией вашего паттерна. Я сделал две вещи для этого:

  1. Я убрал скобки вокруг константного текста
  2. Я исправил шаблон, чтобы он соответствовал всему тексту после searchString до запятой

Вот код:

public class Logtest {

    String logPattern_orig = ".*(userName:)(\\S+)\\s(userId:)(\\S+)\\s(session:)(\\S+)\\s(searchString:)([^,]).*";
    String logPattern = ".*userName:(\\S+)\\suserId:(\\S+)\\ssession:(\\S+)\\ssearchString:([^,]*),.*";

    String kafkaMsg = "userName:User.Name userId:FDF3JH4 session:9cf2-21-c6-28-c360f1edba53 searchString:test, searchType:DEFAULT_SEARCH";

    void test() {
        final Pattern p = Pattern.compile(logPattern);
        Matcher matcher = p.matcher(kafkaMsg);

        if (matcher.matches()) {
            System.out.println("Matches!");
            for (int i=1; i <= matcher.groupCount(); i++) {
                System.out.println("Group " + i + "='" + matcher.group(i) + "'");
            }
        }

    }

    public static final void main(String[] args) {
        Logtest lt = new Logtest();
        lt.test();
    }

}

Когда я запускаю его, я получаю следующий вывод:

Matches!
Group 1='User.Name'
Group 2='FDF3JH4'
Group 3='9cf2-21-c6-28-c360f1edba53'
Group 4='test'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...