<?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>Diario de Programación &#187; log4j</title>
	<atom:link href="http://blog.chuidiang.com/tag/log4j/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.chuidiang.com</link>
	<description>Programación e informática en general</description>
	<lastBuildDate>Wed, 25 Jan 2012 23:17:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>JUnit y Log4j</title>
		<link>http://blog.chuidiang.com/2009/06/30/junit-y-log4j/</link>
		<comments>http://blog.chuidiang.com/2009/06/30/junit-y-log4j/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 17:02:03 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[junit]]></category>
		<category><![CDATA[log4j]]></category>
		<category><![CDATA[juni]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=620</guid>
		<description><![CDATA[&#160; Cuando hacemos nuestras clases de test de JUnit, puede ser bastante normal testear clases que usan log4j. Si en nuestros test queemos que se muestre la traza de esas clases, debemos configurar log4j. Lo normal es hacerlo en el m&#233;todo setUp() del test (el que se ejecuta justo antes de cada uno de los [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Cuando hacemos nuestras clases de test de <a href="http://www.chuidiang.com/java/herramientas/test-automaticos/introduccion-test-automaticos.php">JUnit</a>, puede ser bastante normal testear clases que usan log4j. Si en nuestros test queemos que se muestre la traza de esas clases, debemos configurar <a href="http://www.chuidiang.com/chuwiki/index.php?title=Qu%C3%A9_es_log4j">log4j</a>. Lo normal es hacerlo en el m&eacute;todo setUp() del test (el que se ejecuta justo antes de cada uno de los test) de una forma similar a esta</p>
<blockquote>
<p>public void setUp() {<br />
&nbsp;&nbsp; BasicConfigurator.configure();<br />
}</p>
</blockquote>
<p>Quiz&aacute;s, en vez de en el setUp() lo hagamos en el constructor de la clase de test.</p>
<p>Pero esto tiene una peque&ntilde;a cosa que debemos saber. Cada vez que llamamos al BasicConfigurator.configure(), se a&ntilde;ade un ConsoleAppender al log4j. Por ello, cada vez que se ejecuta setUp() (una vez por cada test), se a&ntilde;ade un appender nuevo&#8230; y la traza empieza a salir repetida, ya que cada appender creado saca el mensaje por consola. Si lo hacemos en el constructor y tenemos varias clases de test, tenemos el mismo problema.</p>
<p>Para evitar esto, lo mas sencillo es llamar a BasicConfigurator.configure() en el m&eacute;todo setUp() (y no en el constructor), pero poner tambien un m&eacute;todo tearDown(), que JUnit llama autom&aacute;ticamente al final de cada test, y ah&iacute; borrar los appenders a&ntilde;adidos</p>
<blockquote>
<p>public void tearDown() {<br />
&nbsp;&nbsp; LogManager.shutdown();<br />
}</p>
</blockquote>
<p>De esta forma, por cada test, primero se a&ntilde;adir&aacute; el appender y despu&eacute;s se borrar&aacute;. Cada test tendr&aacute; un &uacute;nico appender y la salida de log ser&aacute; &uacute;nica.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2009/06/30/junit-y-log4j/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Incordiando al personal</title>
		<link>http://blog.chuidiang.com/2009/03/02/incordiando-al-personal/</link>
		<comments>http://blog.chuidiang.com/2009/03/02/incordiando-al-personal/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 19:55:49 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[anécdotas]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[log4j]]></category>
		<category><![CDATA[System.out]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=520</guid>
		<description><![CDATA[&#160; Una de las cosillas que conviene hacer en un programa serio es usar un sistema de logging en condiciones en vez de usar un System.out o un System.err. Sin embargo, aunque se lo dices a la gente, es bastante habitual que muchos se &#34;despisten&#34; o pasen ol&#237;mpicamente del tema, llenando el c&#243;digo de System.out.println(&#34;Voy [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Una de las cosillas que conviene hacer en un programa serio es usar un sistema de logging en condiciones en vez de usar un System.out o un System.err. Sin embargo, aunque se lo dices a la gente, es bastante habitual que muchos se &quot;despisten&quot; o pasen ol&iacute;mpicamente del tema, llenando el c&oacute;digo de System.out.println(&quot;Voy por aqu&iacute;&quot;) y System.out.println(&quot;Entro en el bucle&quot;). Por supuesto, dicen que es temporal, s&oacute;lo para probar, pero la realidad es que luego eso nunca se quita y queda por los siglos de los siglos.</p>
<p>Aprovechando que la clase System tiene un m&eacute;todo setOut() que permite cambiar el System.out por otra cosa, si veo que proliferan los System.out.println(), lo que hago es cambiarlo en el main() de la aplicaci&oacute;n (o en alg&uacute;n sitio menos evidente). Una &quot;colleja&quot; amistosa se puede dar con un c&oacute;digo como este</p>
<blockquote>
<p>package chuidiang.ejemplos;</p>
<p>import java.io.PrintStream;</p>
<p>public class CambiaSystemOut {</p>
<p>&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.setOut(new PrintStream(System.out) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void print(String text) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.print(&quot;No seas capullo y usa log4j&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;Hola mundo&quot;);<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
&nbsp;</p>
</blockquote>
<p>con lo que cuando alguien pone su System.out.println(&quot;salgo del if&quot;) y hace la prueba, ver&aacute; un &quot;No seas capullo y usa el log4j&quot;.</p>
<p>Y si quiero dar la &quot;colleja&quot; de forma m&aacute;s vistosa (y tenemos tiempo para permitirnoslo), se puede poner el mismo mensaje pero usando un JOptionPane.showMessage(), que &quot;canta&quot; m&aacute;s. O ya para una &quot;colleja&quot; nada amistosa, un System.setOut(null), que har&aacute; que salte una NullPointerException cada vez que hagan un System.out.println().</p>
<p>El que no se divierte, es porque no quiere y yo, a veces, me lo paso como los indios.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2009/03/02/incordiando-al-personal/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Un par de cosillas</title>
		<link>http://blog.chuidiang.com/2009/02/25/un-par-de-cosillas/</link>
		<comments>http://blog.chuidiang.com/2009/02/25/un-par-de-cosillas/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 17:38:46 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[anécdotas]]></category>
		<category><![CDATA[log4j]]></category>
		<category><![CDATA[pastor alemán]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=511</guid>
		<description><![CDATA[&#160; Un par de cosillas que aunque no son muy de programaci&#243;n, ah&#237; van. La primera es una peque&#241;a an&#233;cdota que me ha pasado hoy. Pregunt&#233; a mi compa&#241;ero c&#243;mo se hac&#237;a &#34;no s&#233; qu&#233;&#34; con log4j, que estaba seguro de que se pod&#237;a hacer, pero no recordaba c&#243;mo. El tampoco sab&#237;a, as&#237; que mir&#243; [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Un par de cosillas que aunque no son muy de programaci&oacute;n, ah&iacute; van.</p>
<p>La primera es una peque&ntilde;a an&eacute;cdota que me ha pasado hoy. Pregunt&eacute; a mi compa&ntilde;ero c&oacute;mo se hac&iacute;a &quot;no s&eacute; qu&eacute;&quot; con log4j, que estaba seguro de que se pod&iacute;a hacer, pero no recordaba c&oacute;mo. El tampoco sab&iacute;a, as&iacute; que mir&oacute; en google, encontr&oacute; c&oacute;mo y me mando un corredo diciendo &quot;me enga&ntilde;as, s&iacute; que sabes c&oacute;mo se hace&quot; y un enlace &#8230; &iexcl; a <a href="http://www.chuidiang.com/chuwiki/index.php?title=Separar_el_log_en_varios_ficheros">mi propia p&aacute;gina de log4j en la Chuwiki</a> !. Creo que me estoy haciendo mayor y no s&oacute;lo la mano izquierda no sabe lo que hace la derecha, sino que adem&aacute;s no se acuerda.</p>
<p>La otra es sobre un compa&ntilde;ero de trabajo, que ha hecho un sitio web <a href="http://www.losmalvares.es/">sobre&nbsp; venta de pastores alemanes y cahorros</a>. Aunque es fan de las herramientas de Microsoft, casi le tengo convencido para que la haga con PHP y CSS. Por cierto, si alguien visita la p&aacute;gina y se decide a comprar un perro, que le diga que va de mi parte, que me llevo comisi&oacute;n&nbsp; ; &#8211; )</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2009/02/25/un-par-de-cosillas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>log4j 1.2.15</title>
		<link>http://blog.chuidiang.com/2008/05/12/log4j-1215/</link>
		<comments>http://blog.chuidiang.com/2008/05/12/log4j-1215/#comments</comments>
		<pubDate>Mon, 12 May 2008 21:36:32 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[log4j]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[java mail]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=370</guid>
		<description><![CDATA[&#160; Normalmente en mis proyectos maven a&#241;ado el log4j, siempre la versi&#243;n 1.2.12. No por ning&#250;n motivo en particular. S&#237;mplemente era la versi&#243;n disponible la primera vez que lo a&#241;ad&#237; a un proyecto maven y luego ha prevalecido el copy-paste de esa dependencia de un proyecto a otro. El otro d&#237;a cree un proyecto en [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Normalmente en mis proyectos <a href="http://www.chuidiang.com/chuwiki/index.php?title=Categor%C3%ADa:Maven"><em>maven</em></a> a&ntilde;ado el <em>log4j</em>, siempre la versi&oacute;n 1.2.12. No por ning&uacute;n motivo en particular. S&iacute;mplemente era la versi&oacute;n disponible la primera vez que lo a&ntilde;ad&iacute; a un proyecto <em>maven</em> y luego ha prevalecido el copy-paste de esa dependencia de un proyecto a otro.</p>
<p>El otro d&iacute;a cree un proyecto en casa y no ten&iacute;a ning&uacute;n sitio de donde copiar esta dependencia, as&iacute; que me fu&iacute; a internet y busqu&eacute; c&oacute;mo ponerla. Puse la 1.2.15, que es la &uacute;ltima que encontr&eacute; disponible para <em>maven</em>.</p>
<p>Me pongo a compilar con <em>maven</em>, a generar el proyecto para <a href="http://www.chuidiang.com/chuwiki/index.php?title=Categor%C3%ADa:Eclipse"><em>eclipse</em></a> y &#8230; &iexcl;&iexcl; Sorpresa !!. Da fallo. Busco el motivo y resulta que entre los jar que no puede bajarse, est&aacute; el <a href="http://www.chuidiang.com/java/herramientas/javamail/empezar-javamail.php"><em>javamail</em></a>, el <em>activation.jar</em> y alg&uacute;n otro m&aacute;s de los de <em>SUN</em>. Efectivamente, <em>SUN</em> no permite distribuir sus jar, por lo que oficialmente no se puede hacer. En los repositorios <em>maven</em> que hay por el mundo, no est&aacute;n estos jar de SUN, as&iacute; que <em>maven</em> no se los puede bajar. Hay que baj&aacute;rselos a mano y ponerlos en tu repositorio local de <em>maven</em>.</p>
<p>Y digo yo&#8230; &iquest;necesito <em>javamail</em> para <em>log4j</em>? Y aunque sea as&iacute;, &iquest;voy a usarlo?. Pues m&aacute;s bien no. No tengo ning&uacute;n interes en recibir por correo el log de mi aplicaci&oacute;n y tampoco tengo ning&uacute;n enemigo al que odie lo bastante como para mand&aacute;rselo. Mejor dicho, s&iacute; lo tengo, pero lo que no tengo son ganas de quedarme de patitas en la calle.</p>
<p>Creo que esta vez se han pasado un poco. Entiendo que un momento dado, ante un error cr&iacute;tico, alguna aplicaci&oacute;n cr&iacute;tica quiera enviar un correo a alguien. Pero, &iquest;es con un <em>log.error(&#8230;)</em> la mejor forma de hacerlo?. Desde luego puede ser c&oacute;moda en vez de usar <em>javamail</em> directamente, pero &iquest;tienen que cargar todas las aplicaciones que quieran un uso normal de <em>log4j</em> cargar con <em>javamail</em>?. A mi, desde luego, no me gusta.</p>
<p>Y aqu&iacute; es donde llegamos a un punto donde siempre he tenido mis dudas. Por un lado la l&oacute;gica y la elegancia me dicen que deber&iacute;a hacerse algo como <em>log4j-core.jar</em> con lo b&aacute;sico de <em>log4j</em>, es decir, sacar los <em>log</em> por pantalla o por fichero y poco m&aacute;s. Luego, deber&iacute;an hacerse otros jar de amplicaci&oacute;n, como <em>log4j-mail.jar</em>, <em>log4j-bd.jar</em>, etc, de forma que cada uno cargue s&oacute;lo con lo que necesita. Sin embargo, la pereza me pedir&iacute;a que hubiera un &uacute;nico <em>log4j-con-todo.jar</em> y despreocuparme de andar buscando los que debo. Si me sobra el 90% del jar, da igual, no pasa nada.</p>
<p>Y esas dudas son las que siempre me corroen en el trabajo. Ante un proyecto gigante&#8230; &iquest;hacemos muchos jar peque&ntilde;itos por temas, de forma que en otros proyectos podamos llevarnos aquellos mini-jar que necesitamos? o por el contrario &iquest;hacemos un mega jar con todo y si un proyecto no necesita parte de &eacute;l no pasa nada?</p>
<p>En la primera opci&oacute;n, al empezar un proyecto, debemos empezar a elegir jars que necesitamos y a coger tambi&eacute;n los jar de los que dependen esos jar. Afortunadamente maven nos ayuda en el proceso. Sin embargo, la segunda opci&oacute;n es menos elegante pero infinitamente m&aacute;s c&oacute;moda. Cuando empiezo el proyecto, me copio el mega-jar-que-lo-tiene-todo y a trabajar, sin m&aacute;s complicaciones.</p>
<p>&iquest;T&uacute; qu&eacute; eliges?. &iquest;Elegancia o pereza?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2008/05/12/log4j-1215/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

