<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; Bash/Perl: logmerge - программа слияния лог-файлов]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=7247</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=7247&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Bash/Perl: logmerge - программа слияния лог-файлов».]]></description>
		<lastBuildDate>Sun, 19 Aug 2012 18:42:16 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Bash/Perl: logmerge - программа слияния лог-файлов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=62949#p62949</link>
			<description><![CDATA[<p><strong>smaharbA</strong><br />Коллега, прошу прощения за задержку. Вот пример в архиве <a href="http://rghost.ru/39881325">http://rghost.ru/39881325</a>:</p><p>исходные файлы<br />localhost/error.log<br />my/error.log</p><p>конечный файл <br />merged.log</p><p>команда<br />./logmerge -f -n --apache-error localhost/error.log my/error.log &gt; merged.log</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sun, 19 Aug 2012 18:42:16 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=62949#p62949</guid>
		</item>
		<item>
			<title><![CDATA[Re: Bash/Perl: logmerge - программа слияния лог-файлов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=62787#p62787</link>
			<description><![CDATA[<p>выложите два файла лога для примера</p>]]></description>
			<author><![CDATA[null@example.com (smaharbA)]]></author>
			<pubDate>Wed, 15 Aug 2012 03:10:58 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=62787#p62787</guid>
		</item>
		<item>
			<title><![CDATA[Re: Bash/Perl: logmerge - программа слияния лог-файлов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=62770#p62770</link>
			<description><![CDATA[<div class="quotebox"><cite>smaharbA пишет:</cite><blockquote><p>можно пример двух файлов ?</p></blockquote></div><p>Уточните вопрос. Каких файлов?</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Tue, 14 Aug 2012 19:19:44 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=62770#p62770</guid>
		</item>
		<item>
			<title><![CDATA[Re: Bash/Perl: logmerge - программа слияния лог-файлов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=62694#p62694</link>
			<description><![CDATA[<p>можно пример двух файлов ?</p>]]></description>
			<author><![CDATA[null@example.com (smaharbA)]]></author>
			<pubDate>Sun, 12 Aug 2012 11:03:13 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=62694#p62694</guid>
		</item>
		<item>
			<title><![CDATA[Re: Bash/Perl: logmerge - программа слияния лог-файлов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=62692#p62692</link>
			<description><![CDATA[<p>Спасибо... хорошая реализация</p>]]></description>
			<author><![CDATA[null@example.com (remwars)]]></author>
			<pubDate>Sun, 12 Aug 2012 09:14:32 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=62692#p62692</guid>
		</item>
		<item>
			<title><![CDATA[Re: Bash/Perl: logmerge - программа слияния лог-файлов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=61105#p61105</link>
			<description><![CDATA[<p>Немного поправил код и обновил архив на скачивание. Изменения:<br />-- изменил обработчик скрипта на Bash, вместо старого, но еще существующего на многих системах shell<br />-- добавлена возможность чтения архивных файлов .gz/.bz2<br />-- корректная обработка входных аргументы - имен файлов</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Fri, 22 Jun 2012 12:57:24 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=61105#p61105</guid>
		</item>
		<item>
			<title><![CDATA[Bash/Perl: logmerge - программа слияния лог-файлов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=60568#p60568</link>
			<description><![CDATA[<p>Казалось бы простая задача - слить несколько лог-файлов в один и отсортировать. Однако задача несколько усложняется тем, что одна запись лог-файла не равна одной строке, то есть запись может занимать несколько строк. Это хорошо известно тем, кто работал с java приложениями. Там стектрейсы могу занимать по два десятка строк, а это одна запись. </p><p>В интернете попадались аналоги, но либо они были несвободными, либо ориентированы на специфический формат записей лог-файлов (например только веб-серверов), либо возможность работать с многострочными записями была не очевидна. Подгонка под наши нужды возможно заняла бы больше времени чем разработка с нуля. </p><p>Объединение и хронологическая сортировка файлов требуется для анализа событий двух и более взаимодействующих процессов. При простой сортировке двух файлов соседние строки одной записи могут потеряться. <br />Другая проблема заключается в том, что время двух записей может совпадать (например две записи от нескольких нитей, threads, или две последовательных записи одной нити). В данном случае важно сохранить последовательность записей в пределах одного файла. </p><p>Скрипт был написан. Для его работы требуются Bash+Perl. Требуется gzip для чтения сжатых файлов. То есть, скрипт, в первую очередь ориентирован для работы в Unix. Также он может работать и в Windows при наличии установленного Cygwin. Никаких специфических требований к библиотекам Perl нет. Разрабатывалось и тестировалось в следующих конфигурациях:<br /></p><div class="quotebox"><blockquote><p>Windows Vista+Cygwin<br />Bash 3.2.49<br />Perl 5.10.0</p><p>Red Hat Linux<br />Bash 2.05<br />Perl 5.8.9</p></blockquote></div><p>Хотя скрипт писался для собственных нужд, я обнаружил, что его можно расширить для большинства текстовых лог-файлов. В качестве бонуса я добавил пару опций, которые позволяют работать с логами Apache (access.log и error.log). Далее несколько примеров.</p><p>1.<br /></p><div class="codebox"><pre><code>./logmerge --apache-error ./error.log* &gt; all.log</code></pre></div><p>Объединить все error.log* файлы, включая упакованные командой gzip и сохранить в один результирующий файл. Опция --apache-error рассматривает, что строки содержат временную метку в следующем фоормате<br /></p><div class="quotebox"><blockquote><p>[Fri Apr 23 22:14:21 2010] &lt;...&gt;</p></blockquote></div><p>2.<br /></p><div class="codebox"><pre><code>find /export/home/ -name &#039;access.log&#039; | xargs ./logmerge -f -n --apache-access &gt; all.log</code></pre></div><p>найти все последние access.log файлы и объединить их в один отсортировав записи хронологически. В начале каждой строки добавляется имя исходного файла и номер строки (!) в нем. Временная метка определяется так:<br /></p><div class="quotebox"><blockquote><p>&lt;...&gt; [15/Feb/2008:14:18:49 +0300] &lt;...&gt;</p></blockquote></div><p>3. <br /></p><div class="codebox"><pre><code>./logmerge -f -n log/*.log | gzip -c &gt; all.gz</code></pre></div><p>Последний пример - образец того ради чего все это затевалось. Скрипт аналогично предыдущему примеру &quot;сливает&quot; несколько файлов в один добавляя в начало строки имя файла и номер строки. Далее результат передается команде gzip, которая создает сжатый файл. Лог-файл может содержать строки подобные этой: <br /></p><div class="quotebox"><blockquote><p>05/21/2012 21:54:41.070 &lt;the rest of the entry&gt;<br />java.lang.Throwable<br />&nbsp; &nbsp; &nbsp; &nbsp; at boo.hoo.StackTrace.bar(StackTrace.java:223)<br />&nbsp; &nbsp; &nbsp; &nbsp; at boo.hoo.StackTrace.foo(StackTrace.java:218)<br />&nbsp; &nbsp; &nbsp; &nbsp; at boo.hoo.StackTrace.main(StackTrace.java:54)<br />...</p></blockquote></div><p>Здесь описана лишь часть опций скрипта. Архив скрипта доступен на странице <a href="http://code.google.com/p/logmerge/">http://code.google.com/p/logmerge/</a>. Критика и пожелания приветствуются.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Wed, 30 May 2012 05:28:04 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=60568#p60568</guid>
		</item>
	</channel>
</rss>
