Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Парсинг логов на java по шаблону строки / 23 сообщений из 23, страница 1 из 1
21.05.2020, 18:13
    #39960408
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
Добрый день , есть файл логов с nginx в определенном формате :

'$remote_addr [$request_time] $ssl_client_s_dn_cn [$msec] "$request" '
'$status $body_bytes_sent "$http_referer" '
'[$ssl_protocol $ssl_cipher] '
'"$ssl_client_v_start" "$ssl_client_v_end" "$ssl_client_v_remain" '
'"$ssl_session_id $ssl_session_reused" '
'"$http_user_agent" "$http_x_forwarded_for" "$http_method_type"';

есть пробелы между элементами, есть ковычки " , квадратные скобки .

Как я понимаю = нужно по пробелам между частями шаблона смотреть , но в ковычках так же есть проблемы .

Есть пример такой вот строки из логов.

Как ее разложить по строкам?

как в шаблоне ? получить из строки - набор строк - каждая будет соответствовать своей части шаблоне.

Хочется применить к строке шаблон и чтобы она разложилась по нему :)

пример строки 1

Код: java
1.
31.13.144.10 [0.000] 2000113383 [1590050392.065] "POST /api/rpc/ HTTP/1.1" 200 233 "https://www.google.com/" [TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256] "Feb 27 08:23:59 2019 GMT" "Feb 26 08:23:59 2021 GMT" "280" "8045776e39ae7b844b37918060c3d7983cb692998ad45b2472351af88b5a8b8f r" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0" "-" "refreshToken"



пример строки 2

Код: java
1.
178.67.134.48 [0.600] 2000113832 [1590050392.365] "POST /api/rpc/ HTTP/1.1" 200 102 "https://www.google.com/" [TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256] "Jul 10 09:53:29 2019 GMT" "Jul  9 09:53:29 2021 GMT" "414" "- ." "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0" "-" "getCount"




конечный список должен содержать массив массивов ( 2 элемента в данном примере 2 строки)

каждый массив это массив строки по шаблону :



Код: css
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
31.13.144.10
0.000
2000113383
1590050392.065
POST /api/rpc/ HTTP/1.1
200
233 
https://www.google.com/ 
TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256
Feb 27 08:23:59 2019 GMT
Feb 26 08:23:59 2021 GMT 
280 
8045776e39ae7b844b37918060c3d7983cb692998ad45b2472351af88b5a8b8f
r
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0 
- 
refreshToken




Спасибо.
...
Рейтинг: 0 / 0
21.05.2020, 19:08
    #39960434
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
Atum1
Хочется применить к строке шаблон и чтобы она разложилась по нему :)

Шаблон вордовский или чей?
А где программирование?
))))
Читай файл логов и сразу при чтении до пробела получил удаленный адрес.
Его bilder добавил. Потом конец строки добавил.
Лень?
Стрим нужен? Или спринг?
...
Рейтинг: 0 / 0
21.05.2020, 20:04
    #39960449
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
PetroNotC Sharp
Atum1
Хочется применить к строке шаблон и чтобы она разложилась по нему :)

Шаблон вордовский или чей?
А где программирование?
))))
Читай файл логов и сразу при чтении до пробела получил удаленный адрес.
Его bilder добавил. Потом конец строки добавил.
Лень?
Стрим нужен? Или спринг?


Код: java
1.
 String[] str = log.split("\"(,\")*");



я могу ее поделить на 19 элементов , по ковычкам, потом каждый парсить отдельно по пробелам и квадратным скобкам ..

но это как то криво - должно быть готовое решение - на вход шаблон строки на выходе - массив элементов из строки.
...
Рейтинг: 0 / 0
21.05.2020, 21:50
    #39960485
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
LogStash умеет парсить логи nginx. Можно посмотреть его профили.
...
Рейтинг: 0 / 0
21.05.2020, 22:55
    #39960499
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
Atum1,
Split это Г.. решение а ля вижуал бейсик.
Тебе нужно быстрое решение без переключения контекста.
Это то что я сказал выше.
Как головка HDD считывает файл.
Прочитал до разделителя, скинул. Дальше читаешь опять до разделителя.
Ты на этот вариант ноль комментов.
...
Рейтинг: 0 / 0
21.05.2020, 23:15
    #39960503
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
PetroNotC Sharp
Atum1,
Split это Г.. решение а ля вижуал бейсик.
Тебе нужно быстрое решение без переключения контекста.
Это то что я сказал выше.
Как головка HDD считывает файл.
Прочитал до разделителя, скинул. Дальше читаешь опять до разделителя.
Ты на этот вариант ноль комментов.


код ., мне нужен код .
...
Рейтинг: 0 / 0
22.05.2020, 05:38
    #39960538
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
Atum1

код ., мне нужен код .


Зачем?! Есть же ELK . :-)
...
Рейтинг: 0 / 0
22.05.2020, 10:24
    #39960597
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
...
Рейтинг: 0 / 0
22.05.2020, 10:30
    #39960599
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
Atum1
PetroNotC Sharp
Atum1,
Split это Г.. решение а ля вижуал бейсик.
Тебе нужно быстрое решение без переключения контекста.
Это то что я сказал выше.
Как головка HDD считывает файл.
Прочитал до разделителя, скинул. Дальше читаешь опять до разделителя.
Ты на этот вариант ноль комментов.


код ., мне нужен код .

Не люблю ленивых.
Мой выше алгоритм требует 10 мин написания.
Главное ты его понял.
И ты как ТС должен его тут НАЧАТЬ писать.
Иначе лучше банить тут за такие топики.
. split ()
Это все что ты можешь?
...
Рейтинг: 0 / 0
22.05.2020, 11:39
    #39960638
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
Atum1
Хочется применить к строке шаблон и чтобы она разложилась по нему :)

Регулярку можно сделать, везде, где у тебя $something заменить на (.*) и сделать ленивый matсh. Потом последовательно все результаты вытащить. Но я хз как отработает регулярка, может и правда проще посимвольно читать строку, да сбрасывать кусками
...
Рейтинг: 0 / 0
22.05.2020, 13:16
    #39960693
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
Тут-больше подходит Comma-Separated-Values(CSV) parser. Только вместо splitter надо поставить пробел.
На выходе должна быть просто табличка полей. Заходно и quotas правильно обработаются.

А в регулярке - ехануться можно... С квотами.
...
Рейтинг: 0 / 0
22.05.2020, 13:43
    #39960712
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
mayton
Comma-Separated-Values(CSV) parser.

как страшно звучит
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
List<String> list;
		try (BufferedReader br = new BufferedReader(new FileReader(fileTrackFullName))) {
				String line;
				while ((line = br.readLine()) != null){
						System.out.println(line);
				}
		}
}
...
Рейтинг: 0 / 0
22.05.2020, 14:01
    #39960720
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
PetroNotC Sharp,

Тыже только начал? Допиши до конца.
С корректной обработкой пробелов внутри квотированых полей.
...
Рейтинг: 0 / 0
22.05.2020, 14:26
    #39960734
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
mayton,
они не квотированные
Код: java
1.
2.
3.
StringBuffer buffOut;
while ((line = br.readLine()) != null)
       myParse(buffOut, "31.13.144.10 [0.000] 2000113383 [1590050392.065] "POST /" /*line*/);
...
Рейтинг: 0 / 0
22.05.2020, 14:35
    #39960741
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
Видишь автор постит?

Код: java
1.
31.13.144.10 [0.000] 2000113383 [1590050392.065] "POST /api/rpc/ HTTP/1.1" 200 233 "https://www.google.com/" [TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256] "Feb 27 08:23:59 2019 GMT" "Feb 26 08:23:59 2021 GMT" "280" "8045776e39ae7b844b37918060c3d7983cb692998ad45b2472351af88b5a8b8f r" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0" "-" "refreshToken"



Есть и квоты и пробелы.
...
Рейтинг: 0 / 0
22.05.2020, 14:38
    #39960743
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
mayton,
говори по русски.
Пробел это разделитель.
Квота это что?
...
Рейтинг: 0 / 0
22.05.2020, 14:40
    #39960745
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
Atum1
Код: css
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
31.13.144.10
0.000
2000113383
1590050392.065
POST /api/rpc/ HTTP/1.1
200
233 
https://www.google.com/ 
TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256
Feb 27 08:23:59 2019 GMT
Feb 26 08:23:59 2021 GMT 
280 
8045776e39ae7b844b37918060c3d7983cb692998ad45b2472351af88b5a8b8f
r
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0 
- 
refreshToken


тут он всё без разбора херачит на строки
...
Рейтинг: 0 / 0
22.05.2020, 15:34
    #39960763
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
PetroNotC Sharp, символ такой.

Код: java
1.
quote == "\"" == &quot; 
...
Рейтинг: 0 / 0
22.05.2020, 15:37
    #39960765
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
mayton,
Ты видишь что он режет по пробелам а кавычки просто выкидывает?
Я твой пост не понял.
...
Рейтинг: 0 / 0
22.05.2020, 16:06
    #39960778
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
А шаблон сообщения в самом верху топика - содержит переводы строк.
Еще вариант.
...
Рейтинг: 0 / 0
22.05.2020, 16:29
    #39960784
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
mayton
А шаблон сообщения в самом верху топика - содержит переводы строк.
Еще вариант.
пусть содержит. Главное чтобы он на выходе не вводил несколько строк))))))
Автор пример этого ещё не родил.
Он сбежал походу искать аннотацию спринга.
...
Рейтинг: 0 / 0
22.05.2020, 16:30
    #39960785
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
PetroNotC Sharp
mayton
А шаблон сообщения в самом верху топика - содержит переводы строк.
Еще вариант.
пусть содержит. Главное чтобы он на выходе не вЫводил несколько строк))))))
Автор пример этого ещё не родил.
Он сбежал походу искать аннотацию спринга.
...
Рейтинг: 0 / 0
22.05.2020, 16:47
    #39960792
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг логов на java по шаблону строки
Да он - бездельник. Всё сидит и выкуривает готовое решение.

Вот для стека ELK - коробочное https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-nginx.html

Пусть купит лицензии и не парится.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Парсинг логов на java по шаблону строки / 23 сообщений из 23, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]