<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Splatch's devblog &#187; log4j</title>
	<atom:link href="http://blog.dywicki.pl/category/apache/log4j/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.dywicki.pl</link>
	<description>Pragmatyzm kontrolowany</description>
	<lastBuildDate>Thu, 01 Dec 2011 15:47:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>Log4j, przejrzyste komunikaty</title>
		<link>http://blog.dywicki.pl/2008/10/15/log4j-przejrzyste-komunikaty/</link>
		<comments>http://blog.dywicki.pl/2008/10/15/log4j-przejrzyste-komunikaty/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 08:00:10 +0000</pubDate>
		<dc:creator>Łukasz Dywicki</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[log4j]]></category>

		<guid isPermaLink="false">http://blog.dywicki.pl/?p=229</guid>
		<description><![CDATA[Log4j jest najpopularniejszą biblioteką do logowania dla Javy. Została ona wydana już jakiś czas temu i w chwili obecnej rozwija się znacznie wolniej niż kiedyś, warto jednak nadmienić że społeczność wciąż dostarcza nowych możliwości. Może najpierw o samej strukturze log4j. Najważniejsze elementy Log4j ma kilka składowych: Appender Layout Category Dzisiaj skupię się tylko na dwóch [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://logging.apache.org/log4j/">Log4j</a> jest najpopularniejszą biblioteką do logowania dla Javy. Została ona wydana już jakiś czas temu i w chwili obecnej rozwija się znacznie wolniej niż kiedyś, warto jednak nadmienić że społeczność wciąż dostarcza nowych możliwości. Może najpierw o samej strukturze log4j.<br />
<span id="more-229"></span></p>
<h2>Najważniejsze elementy</h2>
<p>Log4j ma kilka składowych:</p>
<ul>
<li>Appender</li>
<li>Layout</li>
<li>Category</li>
</ul>
<p>Dzisiaj skupię się tylko na dwóch pierwszych. Appender jest odpowiedzialny za zapis bądź wysyłanie komunikatów do wybranego miejsca podczas gdy Layout konwertuje wpis do określonego formatu.</p>
<p>Z najciekawszych Appenderów wymienię</p>
<ul>
<li><a href="http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/RollingFileAppender.html">RollingFileAppender</a> rotuje logi do określonego rozmiaru, po osiągnięciu np 10mb kopiuje stary plik zgodnie ze schematem i zaczyna zapisywać do nowego.</li>
<li><a href="http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html">DailyRollingFileAppender</a> zachowuje się podobnie jak wyżej wymieniony z tym, że umożliwia zapis z podziałem na lata, miesiące, dni czy nawet minuty.</li>
<li><a href="http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/net/SyslogAppender.html">SyslogAppender</a>, który wysyła komunikaty do <a href="http://pl.wikipedia.org/wiki/Syslog">Sysloga</a></li>
<li><a href="http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/lf5/LF5Appender.html">LF5Appender</a> wyświetlający logi w okienku tworzonym przy pomocy Swinga.
<li><a href="http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/net/SMTPAppender.html">SMTPAppender</a> wysyłający maile z komunikatami. Jeśli się go źle skonfiguruje gwarantowane zapchanie skrzynki ;-)</li>
<li><a href="http://sourceforge.net/projects/nagiosappender/">NagiosAppender</a> przesyłający komunikaty do <a href="http://www.nagios.org/">Nagiosa</a>, narzędzia służącego do monitorowania.</li>
</ul>
<p>Mając już appender, który wie gdzie zapisywać wypada powiedzieć Log4j też <b>co powinien zapisywać</b>.</p>
<ul>
<li><a href="http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/HTMLLayout.html">HTMLLayout</a> produkujący tabelę <acronym title="HyperText Markup Language">HTML</acronym></li>
<li><a href="http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html">PatternLayout</a> posiadający możliwość określenia &#8220;szablonu&#8221; wpisu.</li>
</ul>
<p>Więcej Layoutów można znaleźć w <a href="http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Layout.html">Javadocu Log4j</a>.</p>
<p>Jako, że zdecydowanie najczęściej używa się PatternLayout dodam parę słów na temat tego co potrafi. We wzorze który będzie później użyty do stworzenia komunikatu możemy używać następujących wyrażeń:</p>
<ul>
<li><b>%c</b> kategoria zdarzenia</li>
<li><b>%C</b> nazwa klasy z której zostało wysłane zdarzenie</li>
<li><b>%d</b> data zdarzenia (przykład: %d{HH:mm:ss,SSS} )</li>
<li><b>%m</b> komunikat wysłany z aplikacji</li>
<li><b>%n</b> separator lini</li>
<li><b>%p</b> priorytet zdarzenia</li>
<li><b>%r</b> ilość milisekund, które zdążyły upłynąć od startu aplikacji</li>
<li><b>%t</b> nazwa wątku z którego zostało wysłane zdarzenie</li>
<li><b>%x</b> kontekst diagnostyczny powiązany z wątkiem (wie ktokolwiek co to znaczy?)</li>
<li><b>%%</b> pojedynczy znak %</li>
<li><b>%M</b> nazwa metody z której zostało wysłane zdarzenie (uwaga, bardzo wolne)</li>
<li><b>%L</b> numer linii z której zdarzenie pochodzi (uwaga, bardzo wolne)</li>
<li><b>%F</b> nazwa pliku z którego pochodzi zdarzenie (uwaga, bardzo wolne)</li>
<li><b>%l</b> informacja o wywołującym zdarzenie (uwaga, bardzo wolne, wskazuje na lokalizację z naszego kodu)</li>
</ul>
<p>Przykłady modyfikatorów:</p>
<ul>
<li><b>%20c</b> dodaje spacje z lewej strony jeśli nazwa kategorii jest krótsza niż 20 znaków</li>
<li><b>%-20c</b> dodaje spacje z prawej strony jeśli nazwa kategorii jest krótsza niż 20 znaków</li>
<li><b>%.30c</b> przycina kategorię pozostawiając ostatnie 30 znaków</li>
<li><b>%20.30c</b> wypełnia z lewej strony nazwę kategorię spacjami do 20 znaków oraz przycina początkowe znaki jeżeli jest dłuższa on 30 znaków</li>
<li><b>%-20.30c</b> analogicznie jak wyżej, z tym że znaki zostaną dodane z prawej strony. Ze swojej strony polecam używanie formatu np %-20.20, co zagwarantuje że element będzie miał zawsze 20 znaków. Jeśli pozostawimy <b>-20.30</b> to element będzie miał 20 znaków jeśli kategoria jest zbyt krótka a 30 gdy będzie za długa</li>
</ul>
<h2>Przykład konfiguracji</h2>
<p>Log4j można konfigurować na kilka sposobów. Programowo, przez plik properties oraz konfigurację <acronym title="eXtensible Markup Language">XML</acronym>. Zdecydowanie najpopularniejszy jest plik properties. Jego użycie jest banalnie proste. Włączamy log4j.jar do tak by był on dostępny w classpathu, a następnie tworzymy plik <em>log4j.properties</em>, który domyślnie jest poszukiwany przez bibliotekę jeśli nie została przekazana żadna konfiguracja. Aby jednak to się stało nasz kod musi spróbować wysłać jakąś wiadomość do Log4j.</p>
<p>log4j.rootLogger DEBUG, out</p>
<p># loggery<br />
log4j.logger.org.springframework INFO<br />
log4j.logger.org.apache.activemq INFO<br />
log4j.logger.org.apache.activemq.spring WARN<br />
log4j.logger.org.apache.servicemix DEBUG, stdout</p>
<p>#appendery<br />
log4j.appender.stdout org.apache.log4j.ConsoleAppender<br />
log4j.appender.stdout.layout org.apache.log4j.PatternLayout<br />
log4j.appender.stdout.layout.ConversionPattern %d{ABSOLUTE} | %-5p | %t | %c | %m%n</p>
<p>log4j.appender.out org.apache.log4j.DailyRollingFileAppender<br />
log4j.appender.out.DatePattern &#8216;-&#8217;yyyy-MM-dd&#8217;.log&#8217;&quot;/&gt;<br />
log4j.appender.out.layout org.apache.log4j.PatternLayout<br />
log4j.appender.out.layout.ConversionPattern %d{ABSOLUTE} | %-5p | %t | %c | %m%n<br />
log4j.appender.out.file E:/fuse-esb/data/log/servicemix</p>
<p>Założenie powyższej konfiguracji jest następujące. Domyślny poziom logowania jest ustawiony na <em>DEBUG</em> a komunikaty są zapisywane do pliku (rootLogger). Zdefiniowane są dwa appendery <em>stdout</em> oraz <em>out</em>. Pierwszy jest użyty tylko dla paczki <em>org.apache.servicemix</em>. Pozostałe loggery mają określony tylko poziom logowania. Pliki z logami będą dzielone na dni, także w lokalizacji <em>E:/fuse-esb/data/log/</em> po 3 dniach działania od 13 do 15 października będziemy mieli 3 pliki:</p>
<ul>
<li>servicemix &#8211; logi z bierzącego dnia</li>
<li>servicemix-2008.10.14.log &#8211; logi z 14 października</li>
<li>servicemix-2008.10.13.log &#8211; logi z 13 października</li>
</ul>
<p>Mam nadzieję że od dzisiaj Log4j będzie Wam drodzy czytelnicy mówił więcej i prościej. Jeśli są jakieś kwestie które pozostają niewyjaśnione &#8211; proszę pytać.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.dywicki.pl/2008/10/15/log4j-przejrzyste-komunikaty/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

