У меня есть два файла журнала с разными форматами даты и времени, которые я хотел бы объединить.Слияние файлов журнала с различными форматами
Первый файл представляет собой стандартный Apache access_log файл следующим образом:
127.0.0.1 - - [29/февраля/2016: 16: 57: 52 -0600] «GET/приложение/WCS/апи/version? nodeRef = workspace: // SpacesStore/ecd62cfa-fd19-4d6b-b45d-14f0e5b92cf0 HTTP/1.1 "200 567
127.0.0.1 - - [29/Feb/2016: 16: 57: 52 -0600]" GET/application/wcs/api/node/workspace/SpacesStore/ecd62cfa-fd19-4d6b-b45d-14f0e5b92cf0/workflow-экземпляры HTTP/1.1 "200 40
127.0.0.1 - - [29/Feb/2016: 16: 57: 52 -0600] «GET/application/wcs/cisco/appId? UserId = abcdefg & requestType = get HTTP/1.1" 200 45
173.37.239.93 - abcdefg [29/Feb/2016: 16: 57: 52 -0600] «GET/share/page/site/nextgen-edcs/document-details? NodeRef = workspace: // SpacesStore/ecd62cfa-fd19 -4d6b-b45d-14f0e5b92cf0 HTTP/1.1 "200 124492
173.37.239.93 - abcdefg [29/Feb/2016: 16: 57: 53 -0600]" GET /share/service/messages_69bcdfdb058bb873ff49cc2a10c958b7.js?locale=en_US HTTP/1.1" 200 81698
173.37.239.93 - ABCDEFG [29/февраля/2016: 16: 57: 53 -0600] "GET /share/res/yui/history/history_543b42a00a378f4d4b6e70c81d915b0a.js HTTP/1.1" 200 5781
. , , где «abcdedfg» = userid.
Второй файл журнала отформатирован следующим образом:
2016-02-12 08: 16: 03630 WARN [cluster.cache.HazelcastSimpleCache] [HTTP-био-8443-Exec-212] Кластер неактивен, но put (k, v) был вызван для кеша HazelcastSimpleCache [cacheName = cache.readersSharedCache]
2016-02-12 08: 16: 03,630 WARN [cluster.cache.HazelcastSimpleCache] [http-bio-8443-exec-212 ] Кластер неактивен, но get (key) был вызван для кеша HazelcastSimpleCache [cacheName = cache.readersSharedCache], key = AclEntity [ID = 1893033, версия = 55, aclId = 16cf5bc3-27d0-4d50-a93d-3bee1ddd112e, isLatest = true, aclVersion = 1, inherits = true, inheritsFrom = 1889292, type = 1, inheritedAcl = 1893034, isVersioned = false, requireVersion = false, aclChangeSet = 1451473]
2016-02-12 08: 16: 03,630 WARN [cluster.cache.HazelcastSimpleCache] [http-bio-8443-exec-212] Кластер неактивен, но put (k, v) был вызван для кэша HazelcastSimpleCache [cacheName = cache.readersSharedCache]
Мои цели:
- конвертировать форматы даты/времени в первый файл журнала в формате даты/времени второго журнала файл
- сбивает IP-адреса из первого файла журнала, но сохраняет идентификаторы пользователя.
- объединить два файла журнала вместе
- сортировать по дате/времени.
Вот то, что я до сих пор -
$LOGFILE1 = "catalina.out";
$LOGFILE2 = "access_log";
open(LOGFILE1) or die("Could not open log file.");
foreach $line (<LOGFILE1>) {
chomp($line);
if ($line =~ /^2016.+$/) {
print $line . "\n";
}
}
open(LOGFILE2) or die("Could not open log file.");
foreach $line (<LOGFILE2>) {
chomp($line);
if ($line =~ /\d{2}\/\S{3}\/\d{4}:\d{2}:\d{2}:\d{2} -\d{3}/) {
print $line . "\n";
}
# format of file 1
# DD/MMM/YYYY:HH:MM:SS -NNNN
# 29/Feb/2016:20:03:07 -600
# format of file 2
# YYYY-MM-DD HH:MM:SS,NNN
# 2016-02-12 08:16:03,631
}
Так что я в основном интересуют только строки с датой/временем информация, поэтому приведенный выше код отбрасывая остальные строки.
Где я застрял:
1) как преобразовать формат даты/времени в файл 1 в формат данных/времени файла 2?
2) Меня не интересуют IP-адреса, но я хочу сохранить идентификаторы пользователей. Поскольку файл 1 не запускается с информацией о дате/времени, подобной файлу 2, после преобразования, как я буду сортировать по дате после слияния двух?
Любая помощь будет оценена!
* Мы помогаем тем, кто помогает себе *. Что вы пробовали, пожалуйста, приложите некоторые усилия. –
@anunsh - добавлен код, который у меня есть. – user9018
Может быть сделано с использованием [DateTime :: Format :: Strptime] (https://metacpan.org/pod/DateTime::Format::Strptime). Вам понадобятся функции 2 функции [parse_datetime и format_datetime] (https://metacpan.org/pod/DateTime::Format::Strptime#strptime-parse_datetime-string). –