<?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>Mersoft Corporation Blog &#187; configuration</title>
	<atom:link href="http://blog.mersoft.com/tag/configuration/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mersoft.com</link>
	<description>Achieve, Compete, and Evolve</description>
	<lastBuildDate>Wed, 07 Sep 2011 15:13:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Problems with duplicate or multiple log messages using log4j xml</title>
		<link>http://blog.mersoft.com/2008/11/03/problems-with-duplicate-or-multiple-log-messages-using-log4j-xml/</link>
		<comments>http://blog.mersoft.com/2008/11/03/problems-with-duplicate-or-multiple-log-messages-using-log4j-xml/#comments</comments>
		<pubDate>Mon, 03 Nov 2008 17:15:05 +0000</pubDate>
		<dc:creator>Peter Tarlos</dc:creator>
				<category><![CDATA[Information Technology]]></category>
		<category><![CDATA[Java/Java Frameworks]]></category>
		<category><![CDATA[additive]]></category>
		<category><![CDATA[additivity]]></category>
		<category><![CDATA[appender]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[duplicate]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[log4j]]></category>
		<category><![CDATA[log4j.xml]]></category>
		<category><![CDATA[logger]]></category>
		<category><![CDATA[multiple]]></category>
		<category><![CDATA[problem]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://blog.mersoft.com/?p=84</guid>
		<description><![CDATA[Are you seeing duplicate or multiple log messages using log4j xml configuration?
The configuration below produces three log messages.
log4j.xml:
&#60;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34; ?&#62;
&#60;!DOCTYPE log4j:configuration SYSTEM &#34;log4j.dtd&#34;&#62;
&#60;log4j:configuration xmlns:log4j=&#34;http://jakarta.apache.org/log4j/&#34;&#62;
&#160;&#160;&#60;appender name=&#34;console&#34; class=&#34;org.apache.log4j.ConsoleAppender&#34;&#62;
&#160;&#160;&#160;&#160;&#60;param name=&#34;Target&#34; value=&#34;System.out&#34; /&#62;
&#160;&#160;&#160;&#160;&#60;layout class=&#34;org.apache.log4j.PatternLayout&#34;&#62;
&#160;&#160;&#160;&#160;&#160;&#160;&#60;param name=&#34;ConversionPattern&#34; value=&#34;%-5p %c{1} &#8211; %m%n&#34; /&#62;
&#160;&#160;&#160;&#160;&#60;/layout&#62;
&#160;&#160;&#60;/appender&#62;
&#160;&#160;&#60;logger name=&#34;com.acme.LoggingTest&#34;&#62;
&#160;&#160;&#160;&#160;&#60;level value=&#34;debug&#34; /&#62;
&#160;&#160;&#160;&#160;&#60;appender-ref ref=&#34;console&#34; /&#62;
&#160;&#160;&#60;/logger&#62;
&#160;&#160;&#60;logger name=&#34;com.acme&#34;&#62;
&#160;&#160;&#160;&#160;&#60;level value=&#34;debug&#34; /&#62;
&#160;&#160;&#160;&#160;&#60;appender-ref ref=&#34;console&#34; /&#62;
&#160;&#160;&#60;/logger&#62;
&#160;&#160;&#60;root&#62;
&#160;&#160;&#160;&#160;&#60;priority value=&#34;debug&#34; /&#62;
&#160;&#160;&#160;&#160;&#60;appender-ref ref=&#34;console&#34; /&#62;
&#160;&#160;&#60;/root&#62;
&#60;/log4j:configuration&#62;

LoggingTest.java:

package com.acme;
public class LoggingTest {
&#160;&#160;
&#160;&#160;private [...]]]></description>
			<content:encoded><![CDATA[<p>Are you seeing duplicate or multiple log messages using log4j xml configuration?<br />
The configuration below produces three log messages.</p>
<p><code>log4j.xml:</code></p>
<div style="text-align:left;color:#000000; background-color:#ffffff; border:solid black 1px; padding:0.5em 1em 0.5em 1em; overflow:auto;font-size:medium; font-family:monospace; "><span style="color:#236e25;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;</span><br />
<span style="color:#236e25;">&lt;!DOCTYPE log4j:configuration SYSTEM &quot;log4j.dtd&quot;&gt;</span><br />
<span style="color:#881280;">&lt;log4j:configuration xmlns:</span><span style="color:#994500;">log4j</span><span style="color:#881280;">=</span><span style="color:#1a1aa6;">&quot;http://jakarta.apache.org/log4j/&quot;</span><span style="color:#881280;">&gt;</span><br />
&nbsp;&nbsp;<span style="color:#881280;">&lt;appender </span><span style="color:#994500;">name</span><span style="color:#881280;">=</span><span style="color:#1a1aa6;">&quot;console&quot;</span><span style="color:#881280;"> </span><span style="color:#994500;">class</span><span style="color:#881280;">=</span><span style="color:#1a1aa6;">&quot;org.apache.log4j.ConsoleAppender&quot;</span><span style="color:#881280;">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881280;">&lt;param </span><span style="color:#994500;">name</span><span style="color:#881280;">=</span><span style="color:#1a1aa6;">&quot;Target&quot;</span><span style="color:#881280;"> </span><span style="color:#994500;">value</span><span style="color:#881280;">=</span><span style="color:#1a1aa6;">&quot;System.out&quot;</span><span style="color:#881280;"> /&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881280;">&lt;layout </span><span style="color:#994500;">class</span><span style="color:#881280;">=</span><span style="color:#1a1aa6;">&quot;org.apache.log4j.PatternLayout&quot;</span><span style="color:#881280;">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881280;">&lt;param </span><span style="color:#994500;">name</span><span style="color:#881280;">=</span><span style="color:#1a1aa6;">&quot;ConversionPattern&quot;</span><span style="color:#881280;"> </span><span style="color:#994500;">value</span><span style="color:#881280;">=</span><span style="color:#1a1aa6;">&quot;%-5p %c{1} &#8211; %m%n&quot;</span><span style="color:#881280;"> /&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881280;">&lt;/layout&gt;</span><br />
&nbsp;&nbsp;<span style="color:#881280;">&lt;/appender&gt;</span><br />
&nbsp;&nbsp;<span style="color:#881280;">&lt;logger </span><span style="color:#994500;">name</span><span style="color:#881280;">=</span><span style="color:#1a1aa6;">&quot;com.acme.LoggingTest&quot;</span><span style="color:#881280;">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881280;">&lt;level </span><span style="color:#994500;">value</span><span style="color:#881280;">=</span><span style="color:#1a1aa6;">&quot;debug&quot;</span><span style="color:#881280;"> /&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881280;">&lt;appender-ref </span><span style="color:#994500;">ref</span><span style="color:#881280;">=</span><span style="color:#1a1aa6;">&quot;console&quot;</span><span style="color:#881280;"> /&gt;</span><br />
&nbsp;&nbsp;<span style="color:#881280;">&lt;/logger&gt;</span><br />
&nbsp;&nbsp;<span style="color:#881280;">&lt;logger </span><span style="color:#994500;">name</span><span style="color:#881280;">=</span><span style="color:#1a1aa6;">&quot;com.acme&quot;</span><span style="color:#881280;">&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881280;">&lt;level </span><span style="color:#994500;">value</span><span style="color:#881280;">=</span><span style="color:#1a1aa6;">&quot;debug&quot;</span><span style="color:#881280;"> /&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881280;">&lt;appender-ref </span><span style="color:#994500;">ref</span><span style="color:#881280;">=</span><span style="color:#1a1aa6;">&quot;console&quot;</span><span style="color:#881280;"> /&gt;</span><br />
&nbsp;&nbsp;<span style="color:#881280;">&lt;/logger&gt;</span><br />
&nbsp;&nbsp;<span style="color:#881280;">&lt;root&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881280;">&lt;priority </span><span style="color:#994500;">value</span><span style="color:#881280;">=</span><span style="color:#1a1aa6;">&quot;debug&quot;</span><span style="color:#881280;"> /&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881280;">&lt;appender-ref </span><span style="color:#994500;">ref</span><span style="color:#881280;">=</span><span style="color:#1a1aa6;">&quot;console&quot;</span><span style="color:#881280;"> /&gt;</span><br />
&nbsp;&nbsp;<span style="color:#881280;">&lt;/root&gt;</span><br />
<span style="color:#881280;">&lt;/log4j:configuration&gt;</span>
</div>
<p><code>LoggingTest.java:</code></p>
<div style="text-align:left;color:#000000; background-color:#ffffff; border:solid black 1px; padding:0.5em 1em 0.5em 1em; overflow:auto; font-size:medium; font-family:monospace; ">
<span style="color:#881350;">package</span> com.acme<span style="color:#683821;">;</span><br />
<span style="font-size:medium; color:#881350;">public</span> <span style="color:#881350;">class</span> LoggingTest {<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;<span style="color:#881350;">private</span> Logger log = Logger.<span style="color:#003369;">getLogger</span>(this.<span style="color:#003369;">getClass</span>());</p>
<p>&nbsp;&nbsp;<span style="color:#881350;font-size:medium;">public</span> <span style="color:#881350;">static</span> <span style="color:#881350;">void</span> <span style="color:#003369;">main</span>(<span style="color:#440088;">String</span>[] args) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#236e25;">// initialize log4j<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#440088;">URL</span> propsUrl = Loader.<span style="color:#003369;">getResource</span>(<span style="color:#760f15;">&quot;log4j.xml&quot;</span>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;DOMConfigurator.<span style="color:#003369;">configure</span>(propsUrl);<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881350;">new</span> <span style="color:#003369;">LoggingTest</span>();<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;<span style="color:#881350;">public</span> <span style="color:#003369;">LoggingTest</span>(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;log.<span style="color:#003369;">debug</span>(<span style="color:#760f15;">&quot;Hello World&quot;</span>);<br />
&nbsp;&nbsp;}<br />
}</div>
<p>The reason for the multiple log messages is that the three loggers (&#8221;com.acme.LoggingTest&#8221;, &#8220;com.acme&#8221; and &#8220;root&#8221;) are configured to use the same &#8220;console&#8221; appender.  The &#8220;com.acme.LoggingTest&#8221; logger logs the first message to its appender and then traverses through its ancestors and logs to their appenders as well.  This behavior is called appender additivity and it is set to &#8220;true&#8221; by default on all loggers including the &#8220;root&#8221; logger.</p>
<blockquote><p>Logger Hiearchy:<br />
- root<br />
- com.acme<br />
- com.acme.LoggingTest</p></blockquote>
<p>The appender additivity can be turned off by specifying additivity=&#8221;false&#8221; on a logger.  This causes the logger to only log to its appender but not to the appenders of its ancestors.  Setting the additivity=&#8221;false&#8221; on all the loggers solves the multiple logging problem.  The modified configuration below only outputs a single log message.</p>
<p>Fixed <code>log4j.xml</code> with <code>additivity="false"</code>:</p>
<div style="text-align:left;color:#000000; background-color:#ffffff; border:solid black 1px; padding:0.5em 1em 0.5em 1em; overflow:auto;font-size:small; font-family:monospace; "><span style="color:#236e25;">&lt;?xml version=&rdquo;1.0? encoding=&rdquo;UTF-8? ?&gt;</span><br />
<span style="color:#236e25;">&lt;!DOCTYPE log4j:configuration SYSTEM &ldquo;log4j.dtd&rdquo;&gt;</span></p>
<p>&lt;log4j:configuration xmlns:<span style="color:#994500;">log4j</span>=&rdquo;http://jakarta.apache.org/log4j/&rdquo;&gt;<br />
&nbsp;&nbsp;&lt;appender <span style="color:#994500;">name</span>=&rdquo;console&rdquo; <span style="color:#994500;">class</span>=&rdquo;org.apache.log4j.ConsoleAppender&rdquo;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;param <span style="color:#994500;">name</span>=&rdquo;Target&rdquo; <span style="color:#994500;">value</span>=&rdquo;System.out&rdquo; /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;layout <span style="color:#994500;">class</span>=&rdquo;org.apache.log4j.PatternLayout&rdquo;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param <span style="color:#994500;">name</span>=&rdquo;ConversionPattern&rdquo; <span style="color:#994500;">value</span>=&rdquo;%-5p %c{1} &ndash; %m%n&rdquo; /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#881280;">&lt;/layout&gt;</span><br />
&nbsp;&nbsp;<span style="color:#881280;">&lt;/appender&gt;</span><br />
&nbsp;&nbsp;&lt;logger <span style="color:#994500;">name</span>=&rdquo;com.acme.LoggingTest&rdquo; <span style="color:#994500;">additivity</span>=&rdquo;false&rdquo;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;level <span style="color:#994500;">value</span>=&rdquo;debug&rdquo; /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;appender-ref <span style="color:#994500;">ref</span>=&rdquo;console&rdquo; /&gt;<br />
&nbsp;&nbsp;<span style="color:#881280;">&lt;/logger&gt;</span><br />
&nbsp;&nbsp;&lt;logger <span style="color:#994500;">name</span>=&rdquo;com.acme&rdquo; <span style="color:#994500;">additivity</span>=&rdquo;false&rdquo;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;level <span style="color:#994500;">value</span>=&rdquo;debug&rdquo; /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;appender-ref <span style="color:#994500;">ref</span>=&rdquo;console&rdquo; /&gt;<br />
&nbsp;&nbsp;<span style="color:#881280;">&lt;/logger&gt;</span><br />
&nbsp;&nbsp;<span style="color:#881280;">&lt;root&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;priority <span style="color:#994500;">value</span>=&rdquo;debug&rdquo; /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;appender-ref <span style="color:#994500;">ref</span>=&rdquo;console&rdquo; /&gt;<br />
&nbsp;&nbsp;<span style="color:#881280;">&lt;/root&gt;</span><br />
<span style="color:#881280;">&lt;/log4j:configuration&gt;</span></div>
<p>More information on this topic can be found on the <a href="//wiki.apache.org/logging-log4j/Log4jXmlFormat" target="_blank">log4j wiki</a>.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.mersoft.com%2F2008%2F11%2F03%2Fproblems-with-duplicate-or-multiple-log-messages-using-log4j-xml%2F&amp;linkname=Problems%20with%20duplicate%20or%20multiple%20log%20messages%20using%20log4j%20xml"><img src="http://blog.mersoft.com/wp-content/plugins/add-to-any/share_save_171_16.gif" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://blog.mersoft.com/2008/11/03/problems-with-duplicate-or-multiple-log-messages-using-log4j-xml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

