<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Jednoduché logování ve Springu</title>
	<atom:link href="http://blog.novoj.net/2009/05/06/jednoduche-logovani-ve-springu/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.novoj.net/2009/05/06/jednoduche-logovani-ve-springu/</link>
	<description>Dává je jen zřídka, obvykle jim není moc rozumět a často vám ani k ničemu nejsou.</description>
	<lastBuildDate>Fri, 03 Sep 2010 16:01:53 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
	<item>
		<title>By: Otec Fura</title>
		<link>http://blog.novoj.net/2009/05/06/jednoduche-logovani-ve-springu/comment-page-1/#comment-16963</link>
		<dc:creator>Otec Fura</dc:creator>
		<pubDate>Mon, 25 Jan 2010 20:06:57 +0000</pubDate>
		<guid isPermaLink="false">http://blog.novoj.net/?p=471#comment-16963</guid>
		<description>Ano, myslím, že tohle bude to správné vysvětlení. Osobně se Cglib proxy nestraním - v případě, že nemá interface opodstatnění (vždy bude jen jediná implementace), bych jej kvůli potřebě použití JDK proxy nezakládal.</description>
		<content:encoded><![CDATA[<p>Ano, myslím, že tohle bude to správné vysvětlení. Osobně se Cglib proxy nestraním &#8211; v případě, že nemá interface opodstatnění (vždy bude jen jediná implementace), bych jej kvůli potřebě použití JDK proxy nezakládal.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: niko</title>
		<link>http://blog.novoj.net/2009/05/06/jednoduche-logovani-ve-springu/comment-page-1/#comment-16957</link>
		<dc:creator>niko</dc:creator>
		<pubDate>Mon, 25 Jan 2010 15:25:59 +0000</pubDate>
		<guid isPermaLink="false">http://blog.novoj.net/?p=471#comment-16957</guid>
		<description>Jo tenhle článek jsem četl a nic podezřelého jsem nenašel (final třída apod.). Po kratším zamyšlení ale myslím, že problém je v tom, že už samotné beany vyzvedávané z kontejneru (bez AOP logování) jsou instance proxy tříd, protože jejich metody jsou anotované jako @Transactional a vzniká tak potřeba proxy přístupu. Pokud jsem správně pochopil dokumentaci, Spring upřednostňuje JDK dynamic proxy pokud je to možné (zde je to díky použití interfaces možné), výsledná proxy třída je pak final a CGLIB proxy pro potřeby logování k ní už vytvořit nejde. Pravděpodobně by se dalo nakonfigurovat vytváření CGLIB proxy i pro transaction management a pak by to fungovalo s CGLIB pro logování a s JDK dynamic proxy už zase ne... 
Každopádně JDK dynamic proxy je mi tak nějak bližší, protože podobným způsobem (přes interface) bych to dělal, kdybych měl podobné logování dodělat &quot;ručně&quot; - rozhodně bych nepoužil dědění. Samozřejmě předpokladem je, že ty potřebné interfaces existují.</description>
		<content:encoded><![CDATA[<p>Jo tenhle článek jsem četl a nic podezřelého jsem nenašel (final třída apod.). Po kratším zamyšlení ale myslím, že problém je v tom, že už samotné beany vyzvedávané z kontejneru (bez AOP logování) jsou instance proxy tříd, protože jejich metody jsou anotované jako @Transactional a vzniká tak potřeba proxy přístupu. Pokud jsem správně pochopil dokumentaci, Spring upřednostňuje JDK dynamic proxy pokud je to možné (zde je to díky použití interfaces možné), výsledná proxy třída je pak final a CGLIB proxy pro potřeby logování k ní už vytvořit nejde. Pravděpodobně by se dalo nakonfigurovat vytváření CGLIB proxy i pro transaction management a pak by to fungovalo s CGLIB pro logování a s JDK dynamic proxy už zase ne&#8230;<br />
Každopádně JDK dynamic proxy je mi tak nějak bližší, protože podobným způsobem (přes interface) bych to dělal, kdybych měl podobné logování dodělat &#8220;ručně&#8221; &#8211; rozhodně bych nepoužil dědění. Samozřejmě předpokladem je, že ty potřebné interfaces existují.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Otec Fura</title>
		<link>http://blog.novoj.net/2009/05/06/jednoduche-logovani-ve-springu/comment-page-1/#comment-16948</link>
		<dc:creator>Otec Fura</dc:creator>
		<pubDate>Mon, 25 Jan 2010 05:17:08 +0000</pubDate>
		<guid isPermaLink="false">http://blog.novoj.net/?p=471#comment-16948</guid>
		<description>Zajimavý článek o Cglib2AopProxy: http://insufficientinformation.blogspot.com/2007/12/spring-dynamic-proxies-vs-cglib-proxies.html

Tahle vyjímka nastává, pokud se člověk snaží vybudovat proxy nad finální třídou, nebo třídou bez bezparametrického konstruktoru. Možná také maskuje vyjímky, které se vyhodí při volání konstruktoru třídy.

Každopádně já Cglib proxy používám poměrně rutinně a taky fungují bez problémů.</description>
		<content:encoded><![CDATA[<p>Zajimavý článek o Cglib2AopProxy: <a href="http://insufficientinformation.blogspot.com/2007/12/spring-dynamic-proxies-vs-cglib-proxies.html" rel="nofollow">http://insufficientinformation.blogspot.com/2007/12/spring-dynamic-proxies-vs-cglib-proxies.html</a></p>
<p>Tahle vyjímka nastává, pokud se člověk snaží vybudovat proxy nad finální třídou, nebo třídou bez bezparametrického konstruktoru. Možná také maskuje vyjímky, které se vyhodí při volání konstruktoru třídy.</p>
<p>Každopádně já Cglib proxy používám poměrně rutinně a taky fungují bez problémů.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: niko</title>
		<link>http://blog.novoj.net/2009/05/06/jednoduche-logovani-ve-springu/comment-page-1/#comment-16896</link>
		<dc:creator>niko</dc:creator>
		<pubDate>Fri, 22 Jan 2010 17:00:51 +0000</pubDate>
		<guid isPermaLink="false">http://blog.novoj.net/?p=471#comment-16896</guid>
		<description>Začínám si s tím hrát a narazil jsem na problém s CGLIB proxy &quot;Could not generate CGLIB subclass of class&quot;. Po pravdě jsem nepřišel na přesný důvod, ale vzhledem k tomu, že mám všechno striktně řešené přes interfaces, zdálo se mi nakonec i jako vhodnější použít JDK dynamic proxy a funguje to bez problémů. Zde to znamená změnit v ukázkovém konfiguračním souboru proxyTargetClass na false. Tak to jen kdyby měl třeba někdo podobný problém.</description>
		<content:encoded><![CDATA[<p>Začínám si s tím hrát a narazil jsem na problém s CGLIB proxy &#8220;Could not generate CGLIB subclass of class&#8221;. Po pravdě jsem nepřišel na přesný důvod, ale vzhledem k tomu, že mám všechno striktně řešené přes interfaces, zdálo se mi nakonec i jako vhodnější použít JDK dynamic proxy a funguje to bez problémů. Zde to znamená změnit v ukázkovém konfiguračním souboru proxyTargetClass na false. Tak to jen kdyby měl třeba někdo podobný problém.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Michal Franc</title>
		<link>http://blog.novoj.net/2009/05/06/jednoduche-logovani-ve-springu/comment-page-1/#comment-8380</link>
		<dc:creator>Michal Franc</dc:creator>
		<pubDate>Thu, 07 May 2009 14:01:58 +0000</pubDate>
		<guid isPermaLink="false">http://blog.novoj.net/?p=471#comment-8380</guid>
		<description>Myslim ze na produkci by melo by standardne vse na info, nejen chyby te zajimaji, ale i co se delo pred, protoze ne vzdy je monze pouzit postup co jsi popsal, tj. po chybe zmenime logovani a pak zjistime vic.</description>
		<content:encoded><![CDATA[<p>Myslim ze na produkci by melo by standardne vse na info, nejen chyby te zajimaji, ale i co se delo pred, protoze ne vzdy je monze pouzit postup co jsi popsal, tj. po chybe zmenime logovani a pak zjistime vic.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Otec Fura</title>
		<link>http://blog.novoj.net/2009/05/06/jednoduche-logovani-ve-springu/comment-page-1/#comment-8376</link>
		<dc:creator>Otec Fura</dc:creator>
		<pubDate>Thu, 07 May 2009 12:18:12 +0000</pubDate>
		<guid isPermaLink="false">http://blog.novoj.net/?p=471#comment-8376</guid>
		<description>Ad Lubor) ano, to je obecně známá vlastnost &quot;proxy based AOP&quot; - nicméně myslím, že už na základě mezivrstvového volání metod mezi objekty se dá lecos o problematické situaci odvodit</description>
		<content:encoded><![CDATA[<p>Ad Lubor) ano, to je obecně známá vlastnost &#8220;proxy based AOP&#8221; &#8211; nicméně myslím, že už na základě mezivrstvového volání metod mezi objekty se dá lecos o problematické situaci odvodit</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Lubor Gajda</title>
		<link>http://blog.novoj.net/2009/05/06/jednoduche-logovani-ve-springu/comment-page-1/#comment-8375</link>
		<dc:creator>Lubor Gajda</dc:creator>
		<pubDate>Thu, 07 May 2009 11:53:44 +0000</pubDate>
		<guid isPermaLink="false">http://blog.novoj.net/?p=471#comment-8375</guid>
		<description>Malou nevyhodou tohto riesenia je ze &quot;proxy based AOP&quot; nieje mozne aplikovat na vnutorne volania metod vramci danej spring beany, ale iba v pripade ak je metoda volana zvonka inou beanou (teda ak volanie prechadza cez AOP proxy). Takze prakticka pouzitelnost je do znacnej miery zavisla na strukture vasho kodu (v akej miere pouziva vnutorne volania metod).</description>
		<content:encoded><![CDATA[<p>Malou nevyhodou tohto riesenia je ze &#8220;proxy based AOP&#8221; nieje mozne aplikovat na vnutorne volania metod vramci danej spring beany, ale iba v pripade ak je metoda volana zvonka inou beanou (teda ak volanie prechadza cez AOP proxy). Takze prakticka pouzitelnost je do znacnej miery zavisla na strukture vasho kodu (v akej miere pouziva vnutorne volania metod).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Otec Fura</title>
		<link>http://blog.novoj.net/2009/05/06/jednoduche-logovani-ve-springu/comment-page-1/#comment-8373</link>
		<dc:creator>Otec Fura</dc:creator>
		<pubDate>Thu, 07 May 2009 11:35:31 +0000</pubDate>
		<guid isPermaLink="false">http://blog.novoj.net/?p=471#comment-8373</guid>
		<description>Vycházeli jsme z této úvahy - na produkčním prostředí je logování typicky nastavené na level WARN nebo ERROR. Tato advice loguje volání metod na úrovni TRACE. Tzn. na produkčním prostředí se do logu typicky nic nedostane.

V případě, že narazíme na chybu, kterou nedokážeme odhalit podle chybového stacktrace, požádáme administrátory zákazníka, aby nám upravili odpovídajícím způsobem log4j konfiguraci (respektive jim pošleme celý konfigurační soubor) a na patřičných místech si zvýšíme loglevel na hodnotu TRACE.

V tu dobu je tedy možné že by se mohly zalogovat i citlivá data. Nicméně počítáme s tím, že po odstranění chyby se vrátí zpět původní nastavení hladin logu a vyrobené logy s TRACE levelem se odstraní.

Navíc máme tedy ještě tu výhodu, že nás systém nepracuje s výrazně citlivými daty, takže je tato politika akceptovatelná. Nicméně ano - v případě požadavku na zabezpečení citlivých dat je určitě legitimní mít vlastní custom advice.

O tomto řešení jsem psal hlavně z toho důvodu, že většinou tak super zabezpečení není třeba a pro tyto účely máme již připravené řešení ve Springu out of the box.</description>
		<content:encoded><![CDATA[<p>Vycházeli jsme z této úvahy &#8211; na produkčním prostředí je logování typicky nastavené na level WARN nebo ERROR. Tato advice loguje volání metod na úrovni TRACE. Tzn. na produkčním prostředí se do logu typicky nic nedostane.</p>
<p>V případě, že narazíme na chybu, kterou nedokážeme odhalit podle chybového stacktrace, požádáme administrátory zákazníka, aby nám upravili odpovídajícím způsobem log4j konfiguraci (respektive jim pošleme celý konfigurační soubor) a na patřičných místech si zvýšíme loglevel na hodnotu TRACE.</p>
<p>V tu dobu je tedy možné že by se mohly zalogovat i citlivá data. Nicméně počítáme s tím, že po odstranění chyby se vrátí zpět původní nastavení hladin logu a vyrobené logy s TRACE levelem se odstraní.</p>
<p>Navíc máme tedy ještě tu výhodu, že nás systém nepracuje s výrazně citlivými daty, takže je tato politika akceptovatelná. Nicméně ano &#8211; v případě požadavku na zabezpečení citlivých dat je určitě legitimní mít vlastní custom advice.</p>
<p>O tomto řešení jsem psal hlavně z toho důvodu, že většinou tak super zabezpečení není třeba a pro tyto účely máme již připravené řešení ve Springu out of the box.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tomáš Piňos</title>
		<link>http://blog.novoj.net/2009/05/06/jednoduche-logovani-ve-springu/comment-page-1/#comment-8372</link>
		<dc:creator>Tomáš Piňos</dc:creator>
		<pubDate>Thu, 07 May 2009 11:26:25 +0000</pubDate>
		<guid isPermaLink="false">http://blog.novoj.net/?p=471#comment-8372</guid>
		<description>Zajímavé. Dosud jsme pro stejný účel používali námi napsaný aspect. 
Zajímalo by mě, jestli v produkčním prostředí logujete opravu všechny public metody *Manager a *Storage tříd, nebo jestli rozlišujete nějakou sadu metod / argumentů, které logovat nechcete (např. citlivá data jako hesla nebo rodná čísla klientů). A pokud ano, jak se toho docílí (na úrovni definice dynamické proxy nebo nějak jinak?).</description>
		<content:encoded><![CDATA[<p>Zajímavé. Dosud jsme pro stejný účel používali námi napsaný aspect.<br />
Zajímalo by mě, jestli v produkčním prostředí logujete opravu všechny public metody *Manager a *Storage tříd, nebo jestli rozlišujete nějakou sadu metod / argumentů, které logovat nechcete (např. citlivá data jako hesla nebo rodná čísla klientů). A pokud ano, jak se toho docílí (na úrovni definice dynamické proxy nebo nějak jinak?).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tomáš Homola</title>
		<link>http://blog.novoj.net/2009/05/06/jednoduche-logovani-ve-springu/comment-page-1/#comment-8369</link>
		<dc:creator>Tomáš Homola</dc:creator>
		<pubDate>Thu, 07 May 2009 09:30:14 +0000</pubDate>
		<guid isPermaLink="false">http://blog.novoj.net/?p=471#comment-8369</guid>
		<description>To si musím někam uložit velmi zajímavá informace :) A o třídě org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator jsem taky nevěděl, ale vypadá to velmi užiečně když chcu všechny bean obalit stejném Interceptor.</description>
		<content:encoded><![CDATA[<p>To si musím někam uložit velmi zajímavá informace <img src='http://blog.novoj.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  A o třídě org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator jsem taky nevěděl, ale vypadá to velmi užiečně když chcu všechny bean obalit stejném Interceptor.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
