<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; Bash/Perl: logmerge - программа слияния лог-файлов]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=7247&amp;type=atom" />
	<updated>2012-08-19T18:42:16Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=7247</id>
		<entry>
			<title type="html"><![CDATA[Re: Bash/Perl: logmerge - программа слияния лог-файлов]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=62949#p62949" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2012-08-19T18:42:16Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=62949#p62949</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Bash/Perl: logmerge - программа слияния лог-файлов]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=62787#p62787" />
			<content type="html"><![CDATA[<p>выложите два файла лога для примера</p>]]></content>
			<author>
				<name><![CDATA[smaharbA]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2911</uri>
			</author>
			<updated>2012-08-15T03:10:58Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=62787#p62787</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Bash/Perl: logmerge - программа слияния лог-файлов]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=62770#p62770" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>smaharbA пишет:</cite><blockquote><p>можно пример двух файлов ?</p></blockquote></div><p>Уточните вопрос. Каких файлов?</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2012-08-14T19:19:44Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=62770#p62770</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Bash/Perl: logmerge - программа слияния лог-файлов]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=62694#p62694" />
			<content type="html"><![CDATA[<p>можно пример двух файлов ?</p>]]></content>
			<author>
				<name><![CDATA[smaharbA]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2911</uri>
			</author>
			<updated>2012-08-12T11:03:13Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=62694#p62694</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Bash/Perl: logmerge - программа слияния лог-файлов]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=62692#p62692" />
			<content type="html"><![CDATA[<p>Спасибо... хорошая реализация</p>]]></content>
			<author>
				<name><![CDATA[remwars]]></name>
			</author>
			<updated>2012-08-12T09:14:32Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=62692#p62692</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Bash/Perl: logmerge - программа слияния лог-файлов]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=61105#p61105" />
			<content type="html"><![CDATA[<p>Немного поправил код и обновил архив на скачивание. Изменения:<br />-- изменил обработчик скрипта на Bash, вместо старого, но еще существующего на многих системах shell<br />-- добавлена возможность чтения архивных файлов .gz/.bz2<br />-- корректная обработка входных аргументы - имен файлов</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2012-06-22T12:57:24Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=61105#p61105</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Bash/Perl: logmerge - программа слияния лог-файлов]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=60568#p60568" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2012-05-30T05:28:04Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=60568#p60568</id>
		</entry>
</feed>
