<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel about="http://blog.gmane.org/gmane.comp.jakarta.log4j.devel">
    <title>gmane.comp.jakarta.log4j.devel</title>
    <link>http://blog.gmane.org/gmane.comp.jakarta.log4j.devel</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14396"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14394"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14393"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14391"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14390"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14388"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14385"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14380"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14376"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14375"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14374"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14372"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14371"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14370"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14368"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14361"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14358"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14357"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14354"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14352"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14396">
    <title>Bug report for Log4j [2008/10/05]</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14396</link>
    <description>+---------------------------------------------------------------------------+
| Bugzilla Bug ID                                                           |
|     +---------------------------------------------------------------------+
|     | Status: UNC=Unconfirmed NEW=New         ASS=Assigned                |
|     |         OPN=Reopened    VER=Verified    (Skipped Closed/Resolved)   |
|     |   +-----------------------------------------------------------------+
|     |   | Severity: BLK=Blocker CRI=Critical  REG=Regression  MAJ=Major   |
|     |   |           MIN=Minor   NOR=Normal    ENH=Enhancement TRV=Trivial |
|     |   |   +-------------------------------------------------------------+
|     |   |   | Date Posted                                                 |
|     |   |   |          +--------------------------------------------------+
|     |   |   |          | Description                                      |
|     |   |   |          |                                                  |
|13099|Opn|Nor|2002-09-27|DOMConfigurator ignores category factory setting  |
|17887|Opn|Maj|2003-03-11|RollingFileAppender does not work for 10 threads  |
|20395|Inf|Enh|2003-06-01|PreparedStatementAppender Enhancement             |
|23329|Ass|Enh|2003-09-22|&lt;logger&gt; element in XML config should support reso|
|25355|Ass|Enh|2003-12-09|allow to require "TLS/SSL only" for outgoing mails|
|26084|Inf|Nor|2004-01-13|Log Event detail panel does not show special chara|
|27363|Inf|Enh|2004-03-02|JNI based SyslogAppender                          |
|27367|Inf|Enh|2004-03-02|NetSendAppender                                   |
|28647|Ass|Enh|2004-04-28|Add "Flush on Level" capability to FileAppender   |
|29244|Inf|Nor|2004-05-27|Preserve XML content in log messages when using XM|
|29304|New|Nor|2004-05-30|Starting XMLSocketAppender from config file       |
|29305|New|Nor|2004-05-30|Chainsaw doesn't see locationinfo from XMLSocketRe|
|29735|New|Nor|2004-06-22|Receiver list display error  when receiver has no |
|30055|New|Nor|2004-07-12|Problem with registering Appenders with the same n|
|30407|Inf|Maj|2004-07-30|Externally rolled file problem                    |
|30888|New|Maj|2004-08-27|Chainsaw mixes files in same panel                |
|30890|New|Min|2004-08-27|Newly opened log file should get focus            |
|30892|New|Min|2004-08-27|Log files cannot be closed                        |
|31089|New|Nor|2004-09-07|Does not accept ISO8601 dates in focus field      |
|31178|Inf|Cri|2004-09-11|Exception using Chainsaw for simple debugging     |
|31179|Ass|Enh|2004-09-11|Implement Chainsaw as Eclipse stand-alone applicat|
|33278|New|Min|2005-01-27|NPE thrown durring daily log file rollover        |
|33493|Inf|Enh|2005-02-10|contribution to log4j: servlet diagnostic context |
|33717|New|Nor|2005-02-23|Leaving out %throwable in ConversionPattern adds t|
|34440|New|Nor|2005-04-13|sandbox:IMAppender - comma-seperated recipient lis|
|34491|Ver|Nor|2005-04-18|Missing include in build.jms target results in mis|
|34651|New|Enh|2005-04-27|allow for a header on top of every rolled file    |
|34738|New|Nor|2005-05-04|Chainsaw does not remember what Columns are select|
|34945|Inf|Nor|2005-05-17|ThrowableInformation has dubious Stack Trace extra|
|34974|Inf|Cri|2005-05-19|Exception when running a Pluglet                  |
|35180|New|Min|2005-06-02|Multiple lines "XML files (*.xml)" in drop down li|
|35239|Inf|Nor|2005-06-06|NullPointerException when saving displayed events |
|35563|Inf|Enh|2005-06-30|Syslog appender parametrability                   |
|35996|Inf|Enh|2005-08-03|Add support for ant-like &lt;property&gt; in log4j.xml  |
|36435|New|Enh|2005-08-31|Log4J RollingFileAppender under OpenVMS does not f|
|36654|Inf|Min|2005-09-14|Provide better error messages for "Please initiali|
|36789|Inf|Nor|2005-09-23|Empty control flow statement in org.apache.log4j.l|
|36860|New|Enh|2005-09-29|[jmx] Add ability to create a logger MBean for a n|
|37349|Ass|Nor|2005-11-03|DBAppender not working with jTDS driver           |
|37638|New|Nor|2005-11-25|logging doesn't fall back with FallbackErrorHandle|
|37734|Inf|Nor|2005-12-01|Customize Event ID and Event Category with NTEVent|
|37762|Ass|Enh|2005-12-02|RSSAppender or other approach.                    |
|38061|New|Nor|2005-12-28|Problem configuring an errorHandler using a proper|
|38363|Ass|Nor|2006-01-24|SecurityException during log output               |
|38394|Ver|Enh|2006-01-26|PropertySetter fails to print stacktrace if error |
|38395|Ver|Reg|2006-01-26|Unable to set threshold on appender via config fil|
|38406|Ver|Nor|2006-01-26|jdk1.4 dependencies in log4j 1.3 alpha            |
|38513|New|Nor|2006-02-05|[PATCH] Suggested unit test for JMSAppender       |
|38582|Ass|Nor|2006-02-08|Chainsaw does not include Receiver JavaDoc in dist|
|38590|Inf|Nor|2006-02-09|no space on device fails another instance         |
|38883|Opn|Nor|2006-03-07|LogFilePatternReceiver fails to process multi-line|
|38884|New|Nor|2006-03-07|null pointer exception displaying logs if number o|
|39690|Inf|Cri|2006-05-31|Initialization fail in J2EE Environment           |
|39691|Ass|Nor|2006-05-31|DBAppender doesn't log long events                |
|40068|New|Nor|2006-07-18|Add support for attach-on-demand API to chainsaw  |
|40124|New|Min|2006-07-27|startup (JWS) does not initialize ignored elements|
|40251|Opn|Min|2006-08-14|Hard coded JMX domain name for MBean instances    |
|40382|Inf|Maj|2006-09-01|Sysappender hangs during boot time on HP          |
|40385|Inf|Maj|2006-09-01|SocketServer cannot find config file when passed a|
|40472|New|Nor|2006-09-11|SettingsManager calls loadSettings with global set|
|40533|New|Nor|2006-09-18|Chainsaw not showing all logging statements       |
|40570|Inf|Blk|2006-09-21|RollingFileAppender does not rollover when the fil|
|40611|New|Trv|2006-09-27|Bad subclass example; NullPointerException in Logg|
|40736|Inf|Nor|2006-10-11|log4j delete permission denied                    |
|40889|Inf|Nor|2006-11-03|repeated entries in log after failure             |
|40990|Inf|Nor|2006-11-17|Cannot bind port or ip address for outgoing UDP so|
|41006|Inf|Enh|2006-11-20|Contributing XMLSocketHubReceiver                 |
|41214|Ass|Maj|2006-12-19|Deadlock with RollingFileAppender                 |
|41311|Inf|Min|2007-01-06|Please make TimeBasedRollingPolicy non-final?     |
|41316|New|Nor|2007-01-08|NPE when using RollingFileAppender in Tomcat.     |
|41547|Inf|Nor|2007-02-05|PropertyConfigurator and layout.contentType       |
|41799|New|Enh|2007-03-09|SyslogAppender should enable to customize Log4j.Le|
|41882|Inf|Nor|2007-03-18|IE7 problems with Log4J web site                  |
|41937|New|Nor|2007-03-23|Logs from some panels missing in custom expression|
|41980|Inf|Maj|2007-03-29|Log4j stop updating log file- version log4j-1.2.8 |
|42171|New|Nor|2007-04-19|SocketHubReceiver duplicates messages             |
|42189|Ass|Nor|2007-04-22|Add simple bridge for java.util.logging, with basi|
|42516|Inf|Nor|2007-05-24|Log4j failed to log file when packaged in Eclipse |
|42664|New|Enh|2007-06-14|JUL Appender                                      |
|42842|Opn|Nor|2007-07-09|Create a PUBLIC identifier for the log4j DTD      |
|42883|Opn|Nor|2007-07-12|'Welcome' and 'Drag &amp; Drop' panels can't be hidden|
|42933|Inf|Maj|2007-07-18|IllegalStateException thrown from FileAppender.clo|
|43061|Opn|Enh|2007-08-08|Flush appender regularty                          |
|43148|Ass|Nor|2007-08-16|LogFilePatternReceiver depends on jakarta-oro, cou|
|43277|New|Nor|2007-08-31|Add LogMF.entering, .exiting and .throwing methods|
|43282|Ass|Nor|2007-08-31|Add OSGi packaging info to log4j and companions   |
|43313|Inf|Nor|2007-09-05|log4j 1.2.16 release considerations and discussion|
|43403|Inf|Nor|2007-09-16|PatternLayout: new format modifer: prefix if non-e|
|43619|New|Enh|2007-10-13|Simple proposal for pluggable sys-props resolvers |
|43637|Inf|Nor|2007-10-16|SocketAppender.append(LoggingEvent) calls the Erro|
|43728|Inf|Cri|2007-10-29|Log file loss when specified file is locked by ano|
|43736|Ass|Nor|2007-10-30|Chainsaw does not honor encoding when loading XML |
|43820|New|Enh|2007-11-08|[PATCH] Layered Configurator Patch                |
|43879|Inf|Nor|2007-11-16|FileAppender writes Header multiple times         |
|43911|Inf|Nor|2007-11-20|logfiles not getting rolled over with RollingFileA|
|43923|Inf|Min|2007-11-21|JBOSS specific information in javadocs            |
|44038|Inf|Cri|2007-12-07|log4j is susceptible to exceptions thrown by Excep|
|44219|Inf|Nor|2008-01-13|'WARNING' for a log level is silently ignored/chan|
|44308|Inf|Enh|2008-01-28|[Patch] JMX component for managing Logger configur|
|44357|New|Enh|2008-02-05|List of property keys                             |
|44370|Inf|Reg|2008-02-06|MANIFEST.MF broken in log4j-1.2.15.jar            |
|44386|Opn|Nor|2008-02-10|NTEventLogAppender.dll for windows 64             |
|44526|Inf|Nor|2008-03-04|segmentation fault occuring when PropertyConfigura|
|44557|Inf|Nor|2008-03-07|no close call to Appender after replacing the root|
|44644|New|Nor|2008-03-20|Default ContentType for Layout is text/html which |
|44649|Inf|Nor|2008-03-20|JMS Hangs when a Root Appender                    |
|44700|Inf|Nor|2008-03-28|Log4J locks rolled log files                      |
|44727|Inf|Nor|2008-04-01|Add missing Logger#isErrorEnabled and isWarningEna|
|44834|Inf|Nor|2008-04-17|SimpleSocketServer looses buffered logs, produces |
|44839|Inf|Nor|2008-04-17|SyslogAppender logging to a UNIX domain socket    |
|44932|New|Enh|2008-05-05|improve DailyRollingFileAppender handling of rotat|
|44934|Inf|Enh|2008-05-05|add helper method to DailyRollingFileAppender to g|
|44945|New|Nor|2008-05-06|SyslogAppender not working                        |
|45029|Ass|Nor|2008-05-18|Additional unit tests for Filters in extras compan|
|45042|New|Nor|2008-05-19|Need a reliable way to detect misconfiguration    |
|45068|New|Enh|2008-05-22|Ability to copy contents from log-entries         |
|45109|New|Nor|2008-05-31|SMTPAppender uses wrong property for mail server  |
|45165|Ass|Enh|2008-06-09|Multifile Appender                                |
|45224|Inf|Nor|2008-06-17|Log 4j  giving nullpointer when reloading applicat|
|45231|Inf|Nor|2008-06-18|Clear appenders call on logger calls a helper whic|
|45236|Inf|Cri|2008-06-19|Wriring output to an out-dated file.              |
|45304|New|Nor|2008-06-29|using log4j with OAS for some reasone all the logg|
|45305|Inf|Nor|2008-06-29|using log4j with OAS for some reasone all the logg|
|45375|New|Enh|2008-07-10|Building log4j core without manually installing li|
|45481|New|Trv|2008-07-25|Source contains unused imports                    |
|45482|Inf|Min|2008-07-25|Source contains unused variables                  |
|45493|New|Maj|2008-07-28|Log4j file getting overwritten                    |
|45629|New|Nor|2008-08-13|TopicConnection is not closed                     |
|45660|New|Enh|2008-08-20|NDC could remove Hashtable entry if Stack gets emp|
|45704|New|Maj|2008-08-28|Failed to load logging.xml for JRE 1.5.0_16 and We|
|45753|New|Nor|2008-09-06|Code contribution                                 |
|45781|New|Nor|2008-09-11|RollingFileAppender under Windows does not rotate |
|45782|New|Enh|2008-09-11|Add a new appender that zip's rolled files        |
|45855|New|Enh|2008-09-21|Add site/apt documentation for JULBridgeLogManager|
|45915|New|Cri|2008-09-30|DeadLock occured in AsyncAppender                 |
|45932|New|Nor|2008-10-01|Log4j JMX MBeans not cleaned up                   |
|45934|New|Enh|2008-10-02|FileAppender should use virtual-machine shutdown h|
|45939|New|Nor|2008-10-02|Cannot drop HierarchyDynamicMBean from LoggerRepos|
|45941|Inf|Enh|2008-10-03|Custom PatternLayout                              |
+-----+---+---+----------+--------------------------------------------------+
| Total  139 bugs                                                           |
+---------------------------------------------------------------------------+
</description>
    <dc:creator>bugzilla&lt; at &gt;apache.org</dc:creator>
    <dc:date>2008-10-06T06:08:17</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14394">
    <title>DO NOT REPLY [Bug 45941] New: Custom PatternLayout</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14394</link>
    <description>https://issues.apache.org/bugzilla/show_bug.cgi?id=45941

           Summary: Custom PatternLayout
           Product: Log4j
           Version: unspecified
          Platform: PC
               URL: http://logging.apache.org/log4j/1.2/apidocs/org/apache/l
                    og4j/PatternLayout.html
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: Layout
        AssignedTo: log4j-dev&lt; at &gt;logging.apache.org
        ReportedBy: spamadore&lt; at &gt;gmail.com


For the moment, you can only use predefined patternLayout here

http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html

An evolution could be to add a system to define our own layout

basically a custom layout could be

---------------------------------------------------------
public class MyPidLayout implements CustomConversionLayout{

     char getConversionCharacter(){
            return 'y';
      }

     String getConversionValue(){
           return properties.getProperty("Pid"));
      }

}
----------------------------------------------------------

André Bergues


</description>
    <dc:creator>bugzilla&lt; at &gt;apache.org</dc:creator>
    <dc:date>2008-10-03T09:58:05</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14393">
    <title>DO NOT REPLY [Bug 45939] New: Cannot drop HierarchyDynamicMBean from LoggerRepository</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14393</link>
    <description>https://issues.apache.org/bugzilla/show_bug.cgi?id=45939

           Summary: Cannot drop HierarchyDynamicMBean from LoggerRepository
           Product: Log4j
           Version: 1.2
          Platform: PC
        OS/Version: Windows XP
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Other
        AssignedTo: log4j-dev&lt; at &gt;logging.apache.org
        ReportedBy: hmak&lt; at &gt;vaultus.com


HierarchyDynamicMBean registered too many times w/ LoggerRepository.  This can
occur when:

1. start MBeanServer
2. register new HierarchyDynamicMBean (HDMBean) to MBeanServer
3. unregister HDMBean from MBeanServer
4. stop MBeanServer
5. repeat (1) - (3)

LoggerReposity will still broadcast to old HDMBean [in addition to new
HDMBean].  There is no API to unregister the MBean.


</description>
    <dc:creator>bugzilla&lt; at &gt;apache.org</dc:creator>
    <dc:date>2008-10-02T16:43:58</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14391">
    <title>DO NOT REPLY [Bug 45934] New: FileAppender should use virtual-machine shutdown hook that flushes buffer automatically</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14391</link>
    <description>https://issues.apache.org/bugzilla/show_bug.cgi?id=45934

           Summary: FileAppender should use virtual-machine shutdown hook
                    that flushes buffer automatically
           Product: Log4j
           Version: 1.2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: Appender
        AssignedTo: log4j-dev&lt; at &gt;logging.apache.org
        ReportedBy: m&lt; at &gt;rtin-burger.de


If org.apache.log4j.FileAppender buffers output (option BufferedIO set to
true), then the underlying WriterAppender's field immediateFlush will set to
false.

So, the FileAppender will skip flushing and it is very likely that the last few
log events will not be recorded on disk when the application exits.

To avoid the loss of these events, an optional virtual-machine shutdown that
flushes automatically at the end should be used.


</description>
    <dc:creator>bugzilla&lt; at &gt;apache.org</dc:creator>
    <dc:date>2008-10-02T11:40:57</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14390">
    <title>DO NOT REPLY [Bug 45932] New: Log4j JMX MBeans not cleaned up</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14390</link>
    <description>https://issues.apache.org/bugzilla/show_bug.cgi?id=45932

           Summary: Log4j JMX MBeans not cleaned up
           Product: Log4j
           Version: 1.2
          Platform: PC
        OS/Version: Windows XP
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Other
        AssignedTo: log4j-dev&lt; at &gt;logging.apache.org
        ReportedBy: hmak&lt; at &gt;vaultus.com


LogManager.resetConfiguration() does not drop the JMX MBeans created by
HierarchyDynamicMBean.

When executed twice, the following

        MBeanServer mbs = ...;
        Properties props = ...;
        HierarchyDynamicMBean hdm = new HierarchyDynamicMBean();
        mbs.registerMBean(hdm, new ObjectName("log4j:hiearchy=default"));

        Enumeration&lt;Logger&gt; iter = (Enumeration&lt;Logger&gt;)
LogManager.getLoggerRepository().getCurrentLoggers();
        while (iter.hasMoreElements()) {
                hdm.addLoggerMBean(iter
                          .nextElement()
                          .getName());
        }

        LogManager.resetConfiguration();
        PropertyConfigurator.configure(props);

throws

        org.apache.log4j.jmx.LoggerDynamicMBean &lt;ERROR  &gt; Could not add
appenderMBean for [F].
        javax.management.InstanceAlreadyExistsException: log4j:appender=F
                at
com.sun.jmx.mbeanserver.RepositorySupport.addMBean(RepositorySupport.java:452)
                at
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.internal_addObject(DefaultMBeanServerInterceptor.java:1410)
                at
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:936)
                at
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:337)
                at
com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:497)
                at
org.apache.log4j.jmx.LoggerDynamicMBean.registerAppenderMBean(Unknown Source)
                at
org.apache.log4j.jmx.LoggerDynamicMBean.handleNotification(Unknown Source)
                at
javax.management.NotificationBroadcasterSupport.handleNotification(NotificationBroadcasterSupport.java:221)
                at
javax.management.NotificationBroadcasterSupport.sendNotification(NotificationBroadcasterSupport.java:184)
                at
org.apache.log4j.jmx.HierarchyDynamicMBean.addAppenderEvent(Unknown Source)
                at
org.apache.log4j.Hierarchy.fireAddAppenderEvent(Hierarchy.java:192)
                at org.apache.log4j.Category.addAppender(Category.java:162)
                at
org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:614)
                at
org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:509)
                at
org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:415)
                at
org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:349)
                ...


</description>
    <dc:creator>bugzilla&lt; at &gt;apache.org</dc:creator>
    <dc:date>2008-10-01T20:43:01</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14388">
    <title>DO NOT REPLY [Bug 45915] New: DeadLock occured in AsyncAppender</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14388</link>
    <description>https://issues.apache.org/bugzilla/show_bug.cgi?id=45915

           Summary: DeadLock occured in AsyncAppender
           Product: Log4j
           Version: 1.2
          Platform: HP
        OS/Version: HP-UX
            Status: NEW
          Severity: critical
          Priority: P2
         Component: Appender
        AssignedTo: log4j-dev&lt; at &gt;logging.apache.org
        ReportedBy: keiichi.fujito&lt; at &gt;hp.com


Unfortunately, our system which uses log4j 1.2.15. encountered the same bug
that was reported in Bug#: 38137 Comment #16. 
This bug seems not to be discussed for the final fix for several months… Is
this bug going to fix in near future?

Here is the thread dump:

Found one Java-level deadlock:
=============================
"Thread-1":
  waiting to lock monitor 6000000000587e40 (object 9fffffffcb409a68, a
java.util.ArrayList),
  which is held by "pool-1-thread-41460"
"pool-1-thread-41460":
  waiting to lock monitor 6000000000588230 (object 9fffffffcb4d9b28, a
org.apache.log4j.spi.RootLogger),
  which is held by "Thread-1"

Java stack information for the threads listed above:
===================================================
"Thread-1":
        at org.apache.log4j.AsyncAppender.append(AsyncAppender.java:163)
        - waiting to lock &lt;9fffffffcb409a68&gt; (a java.util.ArrayList)
        at
org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
        - locked &lt;9fffffffcb409ac0&gt; (a org.apache.log4j.AsyncAppender)
        at
org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
        at org.apache.log4j.Category.callAppenders(Category.java:206)
        - locked &lt;9fffffffcb4d9b28&gt; (a org.apache.log4j.spi.RootLogger)
        at org.apache.log4j.Category.forcedLog(Category.java:391)
        at org.apache.log4j.Category.log(Category.java:856)
        at kid.bs.common.log.KidLogger.log(KidLogger.java:429)
        at kid.bs.common.log.KidLogger.log(KidLogger.java:351)
        at kid.bs.job.KidExecuter.run(KidExecuter.java:1128)
        at java.lang.Thread.run(Thread.java:595)
"pool-1-thread-41460":
        at org.apache.log4j.Category.callAppenders(Category.java:204)
        - waiting to lock &lt;9fffffffcb4d9b28&gt; (a
org.apache.log4j.spi.RootLogger)
        at org.apache.log4j.Category.forcedLog(Category.java:391)
        at org.apache.log4j.Category.log(Category.java:856)
        at kid.bs.common.log.KidLogger.info(KidLogger.java:142)
        at kid.sr.batch.LoadingDaily.action(LoadingDaily.java:2111)
        - locked &lt;9fffffffcbee6e28&gt; (a java.lang.String)
        at
kid.bs.job.thread.KidActionThread.newActionClass(KidActionThread.java:429)
        at
kid.bs.job.thread.KidActionThread.jobExecute(KidActionThread.java:149)
        at kid.bs.job.thread.KidActionThread.run(KidActionThread.java:83)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
        at java.lang.Thread.run(Thread.java:595)

Found 1 deadlock.


</description>
    <dc:creator>bugzilla&lt; at &gt;apache.org</dc:creator>
    <dc:date>2008-09-30T09:31:25</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14385">
    <title>Bug report for Log4j [2008/09/28]</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14385</link>
    <description>+---------------------------------------------------------------------------+
| Bugzilla Bug ID                                                           |
|     +---------------------------------------------------------------------+
|     | Status: UNC=Unconfirmed NEW=New         ASS=Assigned                |
|     |         OPN=Reopened    VER=Verified    (Skipped Closed/Resolved)   |
|     |   +-----------------------------------------------------------------+
|     |   | Severity: BLK=Blocker CRI=Critical  REG=Regression  MAJ=Major   |
|     |   |           MIN=Minor   NOR=Normal    ENH=Enhancement TRV=Trivial |
|     |   |   +-------------------------------------------------------------+
|     |   |   | Date Posted                                                 |
|     |   |   |          +--------------------------------------------------+
|     |   |   |          | Description                                      |
|     |   |   |          |                                                  |
|13099|Opn|Nor|2002-09-27|DOMConfigurator ignores category factory setting  |
|17887|Opn|Maj|2003-03-11|RollingFileAppender does not work for 10 threads  |
|20395|Inf|Enh|2003-06-01|PreparedStatementAppender Enhancement             |
|23329|Ass|Enh|2003-09-22|&lt;logger&gt; element in XML config should support reso|
|25355|Ass|Enh|2003-12-09|allow to require "TLS/SSL only" for outgoing mails|
|26084|Inf|Nor|2004-01-13|Log Event detail panel does not show special chara|
|27363|Inf|Enh|2004-03-02|JNI based SyslogAppender                          |
|27367|Inf|Enh|2004-03-02|NetSendAppender                                   |
|28647|Ass|Enh|2004-04-28|Add "Flush on Level" capability to FileAppender   |
|29244|Inf|Nor|2004-05-27|Preserve XML content in log messages when using XM|
|29304|New|Nor|2004-05-30|Starting XMLSocketAppender from config file       |
|29305|New|Nor|2004-05-30|Chainsaw doesn't see locationinfo from XMLSocketRe|
|29735|New|Nor|2004-06-22|Receiver list display error  when receiver has no |
|30055|New|Nor|2004-07-12|Problem with registering Appenders with the same n|
|30407|Inf|Maj|2004-07-30|Externally rolled file problem                    |
|30888|New|Maj|2004-08-27|Chainsaw mixes files in same panel                |
|30890|New|Min|2004-08-27|Newly opened log file should get focus            |
|30892|New|Min|2004-08-27|Log files cannot be closed                        |
|31089|New|Nor|2004-09-07|Does not accept ISO8601 dates in focus field      |
|31178|Inf|Cri|2004-09-11|Exception using Chainsaw for simple debugging     |
|31179|Ass|Enh|2004-09-11|Implement Chainsaw as Eclipse stand-alone applicat|
|33278|New|Min|2005-01-27|NPE thrown durring daily log file rollover        |
|33493|Inf|Enh|2005-02-10|contribution to log4j: servlet diagnostic context |
|33717|New|Nor|2005-02-23|Leaving out %throwable in ConversionPattern adds t|
|34440|New|Nor|2005-04-13|sandbox:IMAppender - comma-seperated recipient lis|
|34491|Ver|Nor|2005-04-18|Missing include in build.jms target results in mis|
|34651|New|Enh|2005-04-27|allow for a header on top of every rolled file    |
|34738|New|Nor|2005-05-04|Chainsaw does not remember what Columns are select|
|34945|Inf|Nor|2005-05-17|ThrowableInformation has dubious Stack Trace extra|
|34974|Inf|Cri|2005-05-19|Exception when running a Pluglet                  |
|35180|New|Min|2005-06-02|Multiple lines "XML files (*.xml)" in drop down li|
|35239|Inf|Nor|2005-06-06|NullPointerException when saving displayed events |
|35563|Inf|Enh|2005-06-30|Syslog appender parametrability                   |
|35996|Inf|Enh|2005-08-03|Add support for ant-like &lt;property&gt; in log4j.xml  |
|36435|New|Enh|2005-08-31|Log4J RollingFileAppender under OpenVMS does not f|
|36654|Inf|Min|2005-09-14|Provide better error messages for "Please initiali|
|36789|Inf|Nor|2005-09-23|Empty control flow statement in org.apache.log4j.l|
|36860|New|Enh|2005-09-29|[jmx] Add ability to create a logger MBean for a n|
|37349|Ass|Nor|2005-11-03|DBAppender not working with jTDS driver           |
|37638|New|Nor|2005-11-25|logging doesn't fall back with FallbackErrorHandle|
|37734|Inf|Nor|2005-12-01|Customize Event ID and Event Category with NTEVent|
|37762|Ass|Enh|2005-12-02|RSSAppender or other approach.                    |
|38061|New|Nor|2005-12-28|Problem configuring an errorHandler using a proper|
|38363|Ass|Nor|2006-01-24|SecurityException during log output               |
|38394|Ver|Enh|2006-01-26|PropertySetter fails to print stacktrace if error |
|38395|Ver|Reg|2006-01-26|Unable to set threshold on appender via config fil|
|38406|Ver|Nor|2006-01-26|jdk1.4 dependencies in log4j 1.3 alpha            |
|38513|New|Nor|2006-02-05|[PATCH] Suggested unit test for JMSAppender       |
|38582|Ass|Nor|2006-02-08|Chainsaw does not include Receiver JavaDoc in dist|
|38590|Inf|Nor|2006-02-09|no space on device fails another instance         |
|38883|Opn|Nor|2006-03-07|LogFilePatternReceiver fails to process multi-line|
|38884|New|Nor|2006-03-07|null pointer exception displaying logs if number o|
|39690|Inf|Cri|2006-05-31|Initialization fail in J2EE Environment           |
|39691|Ass|Nor|2006-05-31|DBAppender doesn't log long events                |
|40068|New|Nor|2006-07-18|Add support for attach-on-demand API to chainsaw  |
|40124|New|Min|2006-07-27|startup (JWS) does not initialize ignored elements|
|40251|Opn|Min|2006-08-14|Hard coded JMX domain name for MBean instances    |
|40382|Inf|Maj|2006-09-01|Sysappender hangs during boot time on HP          |
|40385|Inf|Maj|2006-09-01|SocketServer cannot find config file when passed a|
|40472|New|Nor|2006-09-11|SettingsManager calls loadSettings with global set|
|40533|New|Nor|2006-09-18|Chainsaw not showing all logging statements       |
|40570|Inf|Blk|2006-09-21|RollingFileAppender does not rollover when the fil|
|40611|New|Trv|2006-09-27|Bad subclass example; NullPointerException in Logg|
|40736|Inf|Nor|2006-10-11|log4j delete permission denied                    |
|40889|Inf|Nor|2006-11-03|repeated entries in log after failure             |
|40990|Inf|Nor|2006-11-17|Cannot bind port or ip address for outgoing UDP so|
|41006|Inf|Enh|2006-11-20|Contributing XMLSocketHubReceiver                 |
|41214|Ass|Maj|2006-12-19|Deadlock with RollingFileAppender                 |
|41311|Inf|Min|2007-01-06|Please make TimeBasedRollingPolicy non-final?     |
|41316|New|Nor|2007-01-08|NPE when using RollingFileAppender in Tomcat.     |
|41547|Inf|Nor|2007-02-05|PropertyConfigurator and layout.contentType       |
|41799|New|Enh|2007-03-09|SyslogAppender should enable to customize Log4j.Le|
|41882|Inf|Nor|2007-03-18|IE7 problems with Log4J web site                  |
|41937|New|Nor|2007-03-23|Logs from some panels missing in custom expression|
|41980|Inf|Maj|2007-03-29|Log4j stop updating log file- version log4j-1.2.8 |
|42171|New|Nor|2007-04-19|SocketHubReceiver duplicates messages             |
|42189|Ass|Nor|2007-04-22|Add simple bridge for java.util.logging, with basi|
|42516|Inf|Nor|2007-05-24|Log4j failed to log file when packaged in Eclipse |
|42664|New|Enh|2007-06-14|JUL Appender                                      |
|42842|Opn|Nor|2007-07-09|Create a PUBLIC identifier for the log4j DTD      |
|42883|Opn|Nor|2007-07-12|'Welcome' and 'Drag &amp; Drop' panels can't be hidden|
|42933|Inf|Maj|2007-07-18|IllegalStateException thrown from FileAppender.clo|
|43061|Opn|Enh|2007-08-08|Flush appender regularty                          |
|43148|Ass|Nor|2007-08-16|LogFilePatternReceiver depends on jakarta-oro, cou|
|43277|New|Nor|2007-08-31|Add LogMF.entering, .exiting and .throwing methods|
|43282|Ass|Nor|2007-08-31|Add OSGi packaging info to log4j and companions   |
|43313|Inf|Nor|2007-09-05|log4j 1.2.16 release considerations and discussion|
|43403|Inf|Nor|2007-09-16|PatternLayout: new format modifer: prefix if non-e|
|43619|New|Enh|2007-10-13|Simple proposal for pluggable sys-props resolvers |
|43637|Inf|Nor|2007-10-16|SocketAppender.append(LoggingEvent) calls the Erro|
|43728|Inf|Cri|2007-10-29|Log file loss when specified file is locked by ano|
|43736|Ass|Nor|2007-10-30|Chainsaw does not honor encoding when loading XML |
|43820|New|Enh|2007-11-08|[PATCH] Layered Configurator Patch                |
|43879|Inf|Nor|2007-11-16|FileAppender writes Header multiple times         |
|43911|Inf|Nor|2007-11-20|logfiles not getting rolled over with RollingFileA|
|43923|Inf|Min|2007-11-21|JBOSS specific information in javadocs            |
|44038|Inf|Cri|2007-12-07|log4j is susceptible to exceptions thrown by Excep|
|44219|Inf|Nor|2008-01-13|'WARNING' for a log level is silently ignored/chan|
|44308|Inf|Enh|2008-01-28|[Patch] JMX component for managing Logger configur|
|44357|New|Enh|2008-02-05|List of property keys                             |
|44370|Inf|Reg|2008-02-06|MANIFEST.MF broken in log4j-1.2.15.jar            |
|44386|Opn|Nor|2008-02-10|NTEventLogAppender.dll for windows 64             |
|44526|Inf|Nor|2008-03-04|segmentation fault occuring when PropertyConfigura|
|44557|Inf|Nor|2008-03-07|no close call to Appender after replacing the root|
|44644|New|Nor|2008-03-20|Default ContentType for Layout is text/html which |
|44649|Inf|Nor|2008-03-20|JMS Hangs when a Root Appender                    |
|44700|Inf|Nor|2008-03-28|Log4J locks rolled log files                      |
|44727|Inf|Nor|2008-04-01|Add missing Logger#isErrorEnabled and isWarningEna|
|44834|Inf|Nor|2008-04-17|SimpleSocketServer looses buffered logs, produces |
|44839|Inf|Nor|2008-04-17|SyslogAppender logging to a UNIX domain socket    |
|44932|New|Enh|2008-05-05|improve DailyRollingFileAppender handling of rotat|
|44934|Inf|Enh|2008-05-05|add helper method to DailyRollingFileAppender to g|
|44945|New|Nor|2008-05-06|SyslogAppender not working                        |
|45029|Ass|Nor|2008-05-18|Additional unit tests for Filters in extras compan|
|45042|New|Nor|2008-05-19|Need a reliable way to detect misconfiguration    |
|45068|New|Enh|2008-05-22|Ability to copy contents from log-entries         |
|45109|New|Nor|2008-05-31|SMTPAppender uses wrong property for mail server  |
|45165|Ass|Enh|2008-06-09|Multifile Appender                                |
|45224|Inf|Nor|2008-06-17|Log 4j  giving nullpointer when reloading applicat|
|45231|Inf|Nor|2008-06-18|Clear appenders call on logger calls a helper whic|
|45236|Inf|Cri|2008-06-19|Wriring output to an out-dated file.              |
|45304|New|Nor|2008-06-29|using log4j with OAS for some reasone all the logg|
|45305|Inf|Nor|2008-06-29|using log4j with OAS for some reasone all the logg|
|45375|New|Enh|2008-07-10|Building log4j core without manually installing li|
|45481|New|Trv|2008-07-25|Source contains unused imports                    |
|45482|Inf|Min|2008-07-25|Source contains unused variables                  |
|45493|New|Maj|2008-07-28|Log4j file getting overwritten                    |
|45629|New|Nor|2008-08-13|TopicConnection is not closed                     |
|45660|New|Enh|2008-08-20|NDC could remove Hashtable entry if Stack gets emp|
|45704|New|Maj|2008-08-28|Failed to load logging.xml for JRE 1.5.0_16 and We|
|45753|New|Nor|2008-09-06|Code contribution                                 |
|45781|New|Nor|2008-09-11|RollingFileAppender under Windows does not rotate |
|45782|New|Enh|2008-09-11|Add a new appender that zip's rolled files        |
|45855|New|Enh|2008-09-21|Add site/apt documentation for JULBridgeLogManager|
+-----+---+---+----------+--------------------------------------------------+
| Total  134 bugs                                                           |
+---------------------------------------------------------------------------+
</description>
    <dc:creator>bugzilla&lt; at &gt;apache.org</dc:creator>
    <dc:date>2008-09-29T06:08:16</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14380">
    <title>DO NOT REPLY [Bug 45896] New: Classloader problem when logging event (tomcat)</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14380</link>
    <description>https://issues.apache.org/bugzilla/show_bug.cgi?id=45896

           Summary: Classloader problem when logging event (tomcat)
           Product: Log4j
           Version: 1.2
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: blocker
          Priority: P1
         Component: Other
        AssignedTo: log4j-dev&lt; at &gt;logging.apache.org
        ReportedBy: mimounl&lt; at &gt;gmail.com


When using jboss cache and jgroups library I have this error in my logs :

Sep 25, 2008 7:50:36 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive ROOT.war
Sep 25, 2008 7:55:33 PM org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context []
Sep 25, 2008 7:55:33 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive ROOT.war
Sep 25, 2008 7:55:34 PM org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped already.
Could not load java.io.PrintWriter. The eventual following stack trace is
caused by an error thrown for debugging purposes as well as to attempt to
terminate the thread which caused the illegal access, and has no functional
impact.
java.lang.IllegalStateException
        at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1246)
        at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1206)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        at org.apache.log4j.spi.LoggingEvent.&lt;init&gt;(LoggingEvent.java:154)
        at org.apache.log4j.Category.forcedLog(Category.java:388)
        at org.apache.log4j.Category.log(Category.java:853)
        at
org.apache.commons.logging.impl.Log4JLogger.error(Log4JLogger.java:193)
        at org.jgroups.protocols.MPING.run(MPING.java:362)
        at java.lang.Thread.run(Thread.java:619)
Sep 25, 2008 7:55:34 PM org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped already.
Could not load org.apache.log4j.spi.VectorWriter. The eventual following stack
trace is caused by an error thrown for debugging purposes as well as to attempt
to terminate the thread which caused the illegal access, and has no functional
impact.
java.lang.IllegalStateException
        at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1246)
        at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1206)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        at org.apache.log4j.spi.LoggingEvent.&lt;init&gt;(LoggingEvent.java:154)
        at org.apache.log4j.Category.forcedLog(Category.java:388)
        at org.apache.log4j.Category.log(Category.java:853)
        at
org.apache.commons.logging.impl.Log4JLogger.error(Log4JLogger.java:193)
        at org.jgroups.protocols.MPING.run(MPING.java:362)
        at java.lang.Thread.run(Thread.java:619)
Sep 25, 2008 7:55:34 PM org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped already.
Could not load org.apache.log4j.spi.VectorWriter. The eventual following stack
trace is caused by an error thrown for debugging purposes as well as to attempt
to terminate the thread which caused the illegal access, and has no functional
impact.
java.lang.IllegalStateException
        at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1246)
        at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1206)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        at org.apache.log4j.spi.LoggingEvent.&lt;init&gt;(LoggingEvent.java:154)
        at org.apache.log4j.Category.forcedLog(Category.java:388)
        at org.apache.log4j.Category.log(Category.java:853)
        at
org.apache.commons.logging.impl.Log4JLogger.error(Log4JLogger.java:193)
        at
org.jgroups.protocols.Discovery$PingSenderTask$1.run(Discovery.java:389)
        at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
        at
java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
        at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
        at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
        at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
        at java.lang.Thread.run(Thread.java:619)
Sep 25, 2008 7:55:36 PM org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped already.
Could not load org.apache.log4j.spi.VectorWriter. The eventual following stack
trace is caused by an error thrown for debugging purposes as well as to attempt
to terminate the thread which caused the illegal access, and has no functional
impact. 

I also add the issue in the jgroups bug tracker and they said that it's a log4j
problem :
https://jira.jboss.org/jira/browse/JGRP-826?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=12431338

They recommand to put log4j and jgroups in the tomcat/lib directory but it's
very annoying to that because until now all the library management was
centralized in the webapp itself, this way it was easy to upgrade library
version etc...
I tried to migrate the log4j version to 1.2.15 in my pom.xml but it's doesn't
work. I saw here that some people are the same migration problem :
http://yoavs.blogspot.com/2008/05/caution-log4j-1215-brings-in-bunch-of.html
and decided to continue to use the 1.2.14 version.


</description>
    <dc:creator>bugzilla&lt; at &gt;apache.org</dc:creator>
    <dc:date>2008-09-26T11:09:38</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14376">
    <title>DO NOT REPLY [Bug 45886] New: SysLog Appender does not take in to account Identity</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14376</link>
    <description>https://issues.apache.org/bugzilla/show_bug.cgi?id=45886

           Summary: SysLog Appender does not take in to account Identity
           Product: Log4j
           Version: 1.2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: Appender
        AssignedTo: log4j-dev&lt; at &gt;logging.apache.org
        ReportedBy: jamiguet&lt; at &gt;gmail.com


A usual extension to the syslog protocol allows for messages being sent to a
Facility (i.e Local0-7, Auth, ftp, ...) to also contain an Identity. 

The Identity enables for the messages to be differentiated at a later stage and
written to different files or persisted in different databases, even if they
originate from the same facility.

The Identity is declared in the appenders configuration, alongside the
facility.

This change would require for the configuration to contain a parameter i.e.
Identity and for that parameter to be added in the appropriate place in the udp
packet that is sent.


</description>
    <dc:creator>bugzilla&lt; at &gt;apache.org</dc:creator>
    <dc:date>2008-09-25T08:53:44</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14375">
    <title>Custom eventId</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14375</link>
    <description>
Hi!

Saw this thread: http://marc.info/?l=log4j-dev&amp;m=108484236430185&amp;w=2

Has any support for custom eventId's for the NTEventAppender been added?
Perhaps by using a PatternLayout?

TIA,
David

--
David J. M. Karlsen - +47 90 68 22 43
http://www.davidkarlsen.com
http://mp3.davidkarlsen.com
</description>
    <dc:creator>david&lt; at &gt;davidkarlsen.com</dc:creator>
    <dc:date>2008-09-24T12:44:44</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14374">
    <title>Bug report for Log4j [2008/09/21]</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14374</link>
    <description>+---------------------------------------------------------------------------+
| Bugzilla Bug ID                                                           |
|     +---------------------------------------------------------------------+
|     | Status: UNC=Unconfirmed NEW=New         ASS=Assigned                |
|     |         OPN=Reopened    VER=Verified    (Skipped Closed/Resolved)   |
|     |   +-----------------------------------------------------------------+
|     |   | Severity: BLK=Blocker CRI=Critical  REG=Regression  MAJ=Major   |
|     |   |           MIN=Minor   NOR=Normal    ENH=Enhancement TRV=Trivial |
|     |   |   +-------------------------------------------------------------+
|     |   |   | Date Posted                                                 |
|     |   |   |          +--------------------------------------------------+
|     |   |   |          | Description                                      |
|     |   |   |          |                                                  |
|13099|Opn|Nor|2002-09-27|DOMConfigurator ignores category factory setting  |
|17887|Opn|Maj|2003-03-11|RollingFileAppender does not work for 10 threads  |
|20395|Inf|Enh|2003-06-01|PreparedStatementAppender Enhancement             |
|23329|Ass|Enh|2003-09-22|&lt;logger&gt; element in XML config should support reso|
|25355|Ass|Enh|2003-12-09|allow to require "TLS/SSL only" for outgoing mails|
|26084|Inf|Nor|2004-01-13|Log Event detail panel does not show special chara|
|27363|Inf|Enh|2004-03-02|JNI based SyslogAppender                          |
|27367|Inf|Enh|2004-03-02|NetSendAppender                                   |
|28647|Ass|Enh|2004-04-28|Add "Flush on Level" capability to FileAppender   |
|29244|Inf|Nor|2004-05-27|Preserve XML content in log messages when using XM|
|29304|New|Nor|2004-05-30|Starting XMLSocketAppender from config file       |
|29305|New|Nor|2004-05-30|Chainsaw doesn't see locationinfo from XMLSocketRe|
|29735|New|Nor|2004-06-22|Receiver list display error  when receiver has no |
|30055|New|Nor|2004-07-12|Problem with registering Appenders with the same n|
|30407|Inf|Maj|2004-07-30|Externally rolled file problem                    |
|30888|New|Maj|2004-08-27|Chainsaw mixes files in same panel                |
|30890|New|Min|2004-08-27|Newly opened log file should get focus            |
|30892|New|Min|2004-08-27|Log files cannot be closed                        |
|31089|New|Nor|2004-09-07|Does not accept ISO8601 dates in focus field      |
|31178|Inf|Cri|2004-09-11|Exception using Chainsaw for simple debugging     |
|31179|Ass|Enh|2004-09-11|Implement Chainsaw as Eclipse stand-alone applicat|
|33278|New|Min|2005-01-27|NPE thrown durring daily log file rollover        |
|33493|Inf|Enh|2005-02-10|contribution to log4j: servlet diagnostic context |
|33717|New|Nor|2005-02-23|Leaving out %throwable in ConversionPattern adds t|
|34440|New|Nor|2005-04-13|sandbox:IMAppender - comma-seperated recipient lis|
|34491|Ver|Nor|2005-04-18|Missing include in build.jms target results in mis|
|34651|New|Enh|2005-04-27|allow for a header on top of every rolled file    |
|34738|New|Nor|2005-05-04|Chainsaw does not remember what Columns are select|
|34945|Inf|Nor|2005-05-17|ThrowableInformation has dubious Stack Trace extra|
|34974|Inf|Cri|2005-05-19|Exception when running a Pluglet                  |
|35180|New|Min|2005-06-02|Multiple lines "XML files (*.xml)" in drop down li|
|35239|Inf|Nor|2005-06-06|NullPointerException when saving displayed events |
|35563|Inf|Enh|2005-06-30|Syslog appender parametrability                   |
|35996|Inf|Enh|2005-08-03|Add support for ant-like &lt;property&gt; in log4j.xml  |
|36435|New|Enh|2005-08-31|Log4J RollingFileAppender under OpenVMS does not f|
|36654|Inf|Min|2005-09-14|Provide better error messages for "Please initiali|
|36789|Inf|Nor|2005-09-23|Empty control flow statement in org.apache.log4j.l|
|36860|New|Enh|2005-09-29|[jmx] Add ability to create a logger MBean for a n|
|37349|Ass|Nor|2005-11-03|DBAppender not working with jTDS driver           |
|37638|New|Nor|2005-11-25|logging doesn't fall back with FallbackErrorHandle|
|37734|Inf|Nor|2005-12-01|Customize Event ID and Event Category with NTEVent|
|37762|Ass|Enh|2005-12-02|RSSAppender or other approach.                    |
|38061|New|Nor|2005-12-28|Problem configuring an errorHandler using a proper|
|38363|Ass|Nor|2006-01-24|SecurityException during log output               |
|38394|Ver|Enh|2006-01-26|PropertySetter fails to print stacktrace if error |
|38395|Ver|Reg|2006-01-26|Unable to set threshold on appender via config fil|
|38406|Ver|Nor|2006-01-26|jdk1.4 dependencies in log4j 1.3 alpha            |
|38513|New|Nor|2006-02-05|[PATCH] Suggested unit test for JMSAppender       |
|38582|Ass|Nor|2006-02-08|Chainsaw does not include Receiver JavaDoc in dist|
|38590|Inf|Nor|2006-02-09|no space on device fails another instance         |
|38883|Opn|Nor|2006-03-07|LogFilePatternReceiver fails to process multi-line|
|38884|New|Nor|2006-03-07|null pointer exception displaying logs if number o|
|39690|Inf|Cri|2006-05-31|Initialization fail in J2EE Environment           |
|39691|Ass|Nor|2006-05-31|DBAppender doesn't log long events                |
|40068|New|Nor|2006-07-18|Add support for attach-on-demand API to chainsaw  |
|40124|New|Min|2006-07-27|startup (JWS) does not initialize ignored elements|
|40251|Opn|Min|2006-08-14|Hard coded JMX domain name for MBean instances    |
|40382|Inf|Maj|2006-09-01|Sysappender hangs during boot time on HP          |
|40385|Inf|Maj|2006-09-01|SocketServer cannot find config file when passed a|
|40472|New|Nor|2006-09-11|SettingsManager calls loadSettings with global set|
|40533|New|Nor|2006-09-18|Chainsaw not showing all logging statements       |
|40570|Inf|Blk|2006-09-21|RollingFileAppender does not rollover when the fil|
|40611|New|Trv|2006-09-27|Bad subclass example; NullPointerException in Logg|
|40736|Inf|Nor|2006-10-11|log4j delete permission denied                    |
|40889|Inf|Nor|2006-11-03|repeated entries in log after failure             |
|40990|Inf|Nor|2006-11-17|Cannot bind port or ip address for outgoing UDP so|
|41006|Inf|Enh|2006-11-20|Contributing XMLSocketHubReceiver                 |
|41214|Ass|Maj|2006-12-19|Deadlock with RollingFileAppender                 |
|41311|Inf|Min|2007-01-06|Please make TimeBasedRollingPolicy non-final?     |
|41316|New|Nor|2007-01-08|NPE when using RollingFileAppender in Tomcat.     |
|41547|Inf|Nor|2007-02-05|PropertyConfigurator and layout.contentType       |
|41799|New|Enh|2007-03-09|SyslogAppender should enable to customize Log4j.Le|
|41882|Inf|Nor|2007-03-18|IE7 problems with Log4J web site                  |
|41937|New|Nor|2007-03-23|Logs from some panels missing in custom expression|
|41980|Inf|Maj|2007-03-29|Log4j stop updating log file- version log4j-1.2.8 |
|42171|New|Nor|2007-04-19|SocketHubReceiver duplicates messages             |
|42189|Ass|Nor|2007-04-22|Add simple bridge for java.util.logging, with basi|
|42516|Inf|Nor|2007-05-24|Log4j failed to log file when packaged in Eclipse |
|42664|New|Enh|2007-06-14|JUL Appender                                      |
|42842|Opn|Nor|2007-07-09|Create a PUBLIC identifier for the log4j DTD      |
|42883|Opn|Nor|2007-07-12|'Welcome' and 'Drag &amp; Drop' panels can't be hidden|
|42933|Inf|Maj|2007-07-18|IllegalStateException thrown from FileAppender.clo|
|43061|Opn|Enh|2007-08-08|Flush appender regularty                          |
|43148|Ass|Nor|2007-08-16|LogFilePatternReceiver depends on jakarta-oro, cou|
|43277|New|Nor|2007-08-31|Add LogMF.entering, .exiting and .throwing methods|
|43282|Ass|Nor|2007-08-31|Add OSGi packaging info to log4j and companions   |
|43313|Inf|Nor|2007-09-05|log4j 1.2.16 release considerations and discussion|
|43403|Inf|Nor|2007-09-16|PatternLayout: new format modifer: prefix if non-e|
|43619|New|Enh|2007-10-13|Simple proposal for pluggable sys-props resolvers |
|43637|Inf|Nor|2007-10-16|SocketAppender.append(LoggingEvent) calls the Erro|
|43728|Inf|Cri|2007-10-29|Log file loss when specified file is locked by ano|
|43736|Ass|Nor|2007-10-30|Chainsaw does not honor encoding when loading XML |
|43820|New|Enh|2007-11-08|[PATCH] Layered Configurator Patch                |
|43879|Inf|Nor|2007-11-16|FileAppender writes Header multiple times         |
|43911|Inf|Nor|2007-11-20|logfiles not getting rolled over with RollingFileA|
|43923|Inf|Min|2007-11-21|JBOSS specific information in javadocs            |
|44038|Inf|Cri|2007-12-07|log4j is susceptible to exceptions thrown by Excep|
|44219|Inf|Nor|2008-01-13|'WARNING' for a log level is silently ignored/chan|
|44308|Inf|Enh|2008-01-28|[Patch] JMX component for managing Logger configur|
|44357|New|Enh|2008-02-05|List of property keys                             |
|44370|Inf|Reg|2008-02-06|MANIFEST.MF broken in log4j-1.2.15.jar            |
|44386|Opn|Nor|2008-02-10|NTEventLogAppender.dll for windows 64             |
|44526|Inf|Nor|2008-03-04|segmentation fault occuring when PropertyConfigura|
|44557|Inf|Nor|2008-03-07|no close call to Appender after replacing the root|
|44644|New|Nor|2008-03-20|Default ContentType for Layout is text/html which |
|44649|Inf|Nor|2008-03-20|JMS Hangs when a Root Appender                    |
|44700|Inf|Nor|2008-03-28|Log4J locks rolled log files                      |
|44727|Inf|Nor|2008-04-01|Add missing Logger#isErrorEnabled and isWarningEna|
|44834|Inf|Nor|2008-04-17|SimpleSocketServer looses buffered logs, produces |
|44839|Inf|Nor|2008-04-17|SyslogAppender logging to a UNIX domain socket    |
|44932|New|Enh|2008-05-05|improve DailyRollingFileAppender handling of rotat|
|44934|Inf|Enh|2008-05-05|add helper method to DailyRollingFileAppender to g|
|44945|New|Nor|2008-05-06|SyslogAppender not working                        |
|45029|Ass|Nor|2008-05-18|Additional unit tests for Filters in extras compan|
|45042|New|Nor|2008-05-19|Need a reliable way to detect misconfiguration    |
|45068|New|Enh|2008-05-22|Ability to copy contents from log-entries         |
|45109|New|Nor|2008-05-31|SMTPAppender uses wrong property for mail server  |
|45165|Ass|Enh|2008-06-09|Multifile Appender                                |
|45224|Inf|Nor|2008-06-17|Log 4j  giving nullpointer when reloading applicat|
|45231|Inf|Nor|2008-06-18|Clear appenders call on logger calls a helper whic|
|45236|Inf|Cri|2008-06-19|Wriring output to an out-dated file.              |
|45304|New|Nor|2008-06-29|using log4j with OAS for some reasone all the logg|
|45305|Inf|Nor|2008-06-29|using log4j with OAS for some reasone all the logg|
|45375|New|Enh|2008-07-10|Building log4j core without manually installing li|
|45481|New|Trv|2008-07-25|Source contains unused imports                    |
|45482|Inf|Min|2008-07-25|Source contains unused variables                  |
|45493|New|Maj|2008-07-28|Log4j file getting overwritten                    |
|45629|New|Nor|2008-08-13|TopicConnection is not closed                     |
|45660|New|Enh|2008-08-20|NDC could remove Hashtable entry if Stack gets emp|
|45704|New|Maj|2008-08-28|Failed to load logging.xml for JRE 1.5.0_16 and We|
|45753|New|Nor|2008-09-06|Code contribution                                 |
|45781|New|Nor|2008-09-11|RollingFileAppender under Windows does not rotate |
|45782|New|Enh|2008-09-11|Add a new appender that zip's rolled files        |
|45855|New|Enh|2008-09-21|Add site/apt documentation for JULBridgeLogManager|
+-----+---+---+----------+--------------------------------------------------+
| Total  134 bugs                                                           |
+---------------------------------------------------------------------------+
</description>
    <dc:creator>bugzilla&lt; at &gt;apache.org</dc:creator>
    <dc:date>2008-09-22T06:08:17</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14372">
    <title>DO NOT REPLY [Bug 45855] New: Add site/apt documentation for JULBridgeLogManager</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14372</link>
    <description>https://issues.apache.org/bugzilla/show_bug.cgi?id=45855

           Summary: Add site/apt documentation for JULBridgeLogManager
           Product: Log4j
           Version: 1.2
          Platform: PC
        OS/Version: Windows XP
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: Other
        AssignedTo: log4j-dev&lt; at &gt;logging.apache.org
        ReportedBy: javabrett&lt; at &gt;gmail.com


Add site/apt documentation for added class JULBridgeLogManager.  Doc patch
attached.


</description>
    <dc:creator>bugzilla&lt; at &gt;apache.org</dc:creator>
    <dc:date>2008-09-21T07:31:47</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14371">
    <title>svn commit: r697432 - /logging/log4j/trunk/src/main/java/org/apache/log4j/EnhancedThrowableRenderer.java</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14371</link>
    <description>Author: carnold
Date: Sat Sep 20 16:10:48 2008
New Revision: 697432

URL: http://svn.apache.org/viewvc?rev=697432&amp;view=rev
Log:
Bug 45721: Avoid redetermining location and version for previously visited classes

Modified:
    logging/log4j/trunk/src/main/java/org/apache/log4j/EnhancedThrowableRenderer.java

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/EnhancedThrowableRenderer.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/EnhancedThrowableRenderer.java?rev=697432&amp;r1=697431&amp;r2=697432&amp;view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/EnhancedThrowableRenderer.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/EnhancedThrowableRenderer.java Sat Sep 20 16:10:48 2008
&lt; at &gt;&lt; at &gt; -22,6 +22,8 &lt; at &gt;&lt; at &gt;
 import java.lang.reflect.Method;
 import java.net.URL;
 import java.security.CodeSource;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * Enhanced implementation of ThrowableRenderer.  Uses Throwable.getStackTrace
&lt; at &gt;&lt; at &gt; -64,8 +66,9 &lt; at &gt;&lt; at &gt;
                 Object[] elements = (Object[]) getStackTraceMethod.invoke(throwable, noArgs);
                 String[] lines = new String[elements.length + 1];
                 lines[0] = throwable.toString();
+                Map classMap = new HashMap();
                 for(int i = 0; i &lt; elements.length; i++) {
-                    lines[i+1] = formatElement(elements[i]);
+                    lines[i+1] = formatElement(elements[i], classMap);
                 }
                 return lines;
             } catch(Exception ex) {
&lt; at &gt;&lt; at &gt; -77,60 +80,68 &lt; at &gt;&lt; at &gt;
     /**
      * Format one element from stack trace.
      * &lt; at &gt;param element element, may not be null.
+     * &lt; at &gt;param classMap map of class name to location.
      * &lt; at &gt;return string representation of element.
      */
-    private String formatElement(final Object element) {
+    private String formatElement(final Object element, final Map classMap) {
         StringBuffer buf = new StringBuffer("\tat ");
         buf.append(element);
         try {
             String className = getClassNameMethod.invoke(element, (Object[]) null).toString();
-            Class cls = findClass(className);
-            buf.append('[');
-            try {
-                CodeSource source = cls.getProtectionDomain().getCodeSource();
-                if (source != null) {
-                   URL locationURL = source.getLocation();
-                   if (locationURL != null) {
-                       //
-                       //   if a file: URL
-                       //
-                       if ("file".equals(locationURL.getProtocol())) {
-                           String path = locationURL.getPath();
-                           if (path != null) {
-                               //
-                               //  find the last file separator character
-                               //
-                               int lastSlash = path.lastIndexOf('/');
-                               int lastBack = path.lastIndexOf(File.separatorChar);
-                               if (lastBack &gt; lastSlash) {
-                                   lastSlash = lastBack;
-                               }
-                               //
-                               //  if no separator or ends with separator (a directory)
-                               //     then output the URL, otherwise just the file name.
-                               //
-                               if (lastSlash &lt;= 0 || lastSlash == path.length() - 1) {
-                                   buf.append(locationURL);
-                               } else {
-                                   buf.append(path.substring(lastSlash + 1));
-                               }
-                           }
-                       } else {
-                           buf.append(locationURL);
-                       }
-                   }
+            Object classDetails = classMap.get(className);
+            if (classDetails != null) {
+                buf.append(classDetails);
+            } else {
+                Class cls = findClass(className);
+                int detailStart = buf.length();
+                buf.append('[');
+                try {
+                    CodeSource source = cls.getProtectionDomain().getCodeSource();
+                    if (source != null) {
+                        URL locationURL = source.getLocation();
+                        if (locationURL != null) {
+                            //
+                            //   if a file: URL
+                            //
+                            if ("file".equals(locationURL.getProtocol())) {
+                                String path = locationURL.getPath();
+                                if (path != null) {
+                                    //
+                                    //  find the last file separator character
+                                    //
+                                    int lastSlash = path.lastIndexOf('/');
+                                    int lastBack = path.lastIndexOf(File.separatorChar);
+                                    if (lastBack &gt; lastSlash) {
+                                        lastSlash = lastBack;
+                                    }
+                                    //
+                                    //  if no separator or ends with separator (a directory)
+                                    //     then output the URL, otherwise just the file name.
+                                    //
+                                    if (lastSlash &lt;= 0 || lastSlash == path.length() - 1) {
+                                        buf.append(locationURL);
+                                    } else {
+                                        buf.append(path.substring(lastSlash + 1));
+                                    }
+                                }
+                            } else {
+                                buf.append(locationURL);
+                            }
+                        }
+                    }
+                } catch(SecurityException ex) {
                 }
-            } catch(SecurityException ex) {
-            }
-            buf.append(':');
-            Package pkg = cls.getPackage();
-            if (pkg != null) {
-                String implVersion = pkg.getImplementationVersion();
-                if (implVersion != null) {
-                    buf.append(implVersion);
+                buf.append(':');
+                Package pkg = cls.getPackage();
+                if (pkg != null) {
+                    String implVersion = pkg.getImplementationVersion();
+                    if (implVersion != null) {
+                        buf.append(implVersion);
+                    }
                 }
+                buf.append(']');
+                classMap.put(className, buf.substring(detailStart));
             }
-            buf.append(']');
         } catch(Exception ex) {
         }
         return buf.toString();
</description>
    <dc:creator>carnold&lt; at &gt;apache.org</dc:creator>
    <dc:date>2008-09-20T23:10:48</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14370">
    <title>svn commit: r697320 - /logging/log4j/trunk/tests/build.xml</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14370</link>
    <description>Author: carnold
Date: Fri Sep 19 20:56:39 2008
New Revision: 697320

URL: http://svn.apache.org/viewvc?rev=697320&amp;view=rev
Log:
Bug 45635: Lost junit.jar when supporting non-default Maven repo location

Modified:
    logging/log4j/trunk/tests/build.xml

Modified: logging/log4j/trunk/tests/build.xml
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/tests/build.xml?rev=697320&amp;r1=697319&amp;r2=697320&amp;view=diff
==============================================================================
--- logging/log4j/trunk/tests/build.xml (original)
+++ logging/log4j/trunk/tests/build.xml Fri Sep 19 20:56:39 2008
&lt; at &gt;&lt; at &gt; -36,6 +36,8 &lt; at &gt;&lt; at &gt;
   &lt;property name="checkstyle.jar" location="${m2_repo}/checkstyle/checkstyle/${checkstyle.version}/checkstyle-${checkstyle.version}.jar"/&gt;
   &lt;property name="javamail.jar" location="${m2_repo}/javax/mail/mail/1.4/mail-1.4.jar"/&gt;
   &lt;property name="activation.jar" location="${m2_repo}/javax/activation/activation/1.1/activation-1.1.jar"/&gt;
+  &lt;property name="junit.version" value="3.8.1"/&gt;
+  &lt;property name="junit.jar" location="${m2_repo}/junit/junit/${junit.version}/junit-${junit.version}.jar"/&gt;
 
 
   &lt;!-- Read the system environment variables and stores them in properties, --&gt;
</description>
    <dc:creator>carnold&lt; at &gt;apache.org</dc:creator>
    <dc:date>2008-09-20T03:56:39</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14368">
    <title>svn commit: r697315 - in /logging/log4j/trunk: src/changes/ src/main/java/org/apache/log4j/ src/main/java/org/apache/log4j/spi/ src/main/java/org/apache/log4j/xml/ src/main/resources/org/apache/log4j/xml/ tests/input/xml/ tests/src/java/org/apache/log4...</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14368</link>
    <description>Author: carnold
Date: Fri Sep 19 19:37:56 2008
New Revision: 697315

URL: http://svn.apache.org/viewvc?rev=697315&amp;view=rev
Log:
Bug 45721: Add configurable ThrowableRenderers

Added:
    logging/log4j/trunk/src/main/java/org/apache/log4j/DefaultThrowableRenderer.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/EnhancedThrowableRenderer.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/spi/ThrowableRenderer.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/spi/ThrowableRendererSupport.java
    logging/log4j/trunk/tests/input/xml/throwableRenderer1.xml
    logging/log4j/trunk/tests/src/java/org/apache/log4j/DefaultThrowableRendererTest.java
    logging/log4j/trunk/tests/src/java/org/apache/log4j/EnhancedThrowableRendererTest.java
Modified:
    logging/log4j/trunk/src/changes/changes.xml
    logging/log4j/trunk/src/main/java/org/apache/log4j/Hierarchy.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/PropertyConfigurator.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/spi/LoggingEvent.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/spi/ThrowableInformation.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/xml/DOMConfigurator.java
    logging/log4j/trunk/src/main/resources/org/apache/log4j/xml/log4j.dtd
    logging/log4j/trunk/tests/src/java/org/apache/log4j/CoreTestSuite.java
    logging/log4j/trunk/tests/src/java/org/apache/log4j/PatternLayoutTestCase.java
    logging/log4j/trunk/tests/src/java/org/apache/log4j/PropertyConfiguratorTest.java
    logging/log4j/trunk/tests/src/java/org/apache/log4j/xml/DOMTestCase.java

Modified: logging/log4j/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/changes/changes.xml?rev=697315&amp;r1=697314&amp;r2=697315&amp;view=diff
==============================================================================
--- logging/log4j/trunk/src/changes/changes.xml (original)
+++ logging/log4j/trunk/src/changes/changes.xml Fri Sep 19 19:37:56 2008
&lt; at &gt;&lt; at &gt; -61,6 +61,7 &lt; at &gt;&lt; at &gt;
        &lt;action action="fix" issue="45636"&gt;2 tests for DateLayout are failing because of ill initialized DateFormat.&lt;/action&gt;
        &lt;action action="fix" issue="45659"&gt;Incorrect user mailing list URL.&lt;/action&gt;
        &lt;action action="fix" issue="44386"&gt;NTEventLogAppender.dll for 64-bit editions for Microsoft Windows.&lt;/action&gt;
+       &lt;action action="fix" issue="45721"&gt;Add configuration of ThrowableRenderers and add org.apache.log4j.EnhancedThrowableRenderer.&lt;/action&gt;
     &lt;/release&gt;
 
   

Added: logging/log4j/trunk/src/main/java/org/apache/log4j/DefaultThrowableRenderer.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/DefaultThrowableRenderer.java?rev=697315&amp;view=auto
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/DefaultThrowableRenderer.java (added)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/DefaultThrowableRenderer.java Fri Sep 19 19:37:56 2008
&lt; at &gt;&lt; at &gt; -0,0 +1,80 &lt; at &gt;&lt; at &gt;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j;
+
+import org.apache.log4j.spi.ThrowableRenderer;
+
+import java.io.StringWriter;
+import java.io.PrintWriter;
+import java.io.LineNumberReader;
+import java.io.StringReader;
+import java.io.IOException;
+import java.io.InterruptedIOException;
+import java.util.ArrayList;
+
+/**
+ * Default implementation of ThrowableRenderer using
+ * Throwable.printStackTrace.
+ *
+ * &lt; at &gt;since 1.2.16
+ */
+public final class DefaultThrowableRenderer implements ThrowableRenderer {
+    /**
+     * Construct new instance.
+     */
+    public DefaultThrowableRenderer() {
+
+    }
+
+
+    /**
+     * {&lt; at &gt;inheritDoc}
+     */
+    public String[] doRender(final Throwable throwable) {
+        return render(throwable);
+    }
+
+    /**
+     * Render throwable using Throwable.printStackTrace.
+     * &lt; at &gt;param throwable throwable, may not be null.
+     * &lt; at &gt;return string representation.
+     */
+    public static String[] render(final Throwable throwable) {
+        StringWriter sw = new StringWriter();
+        PrintWriter pw = new PrintWriter(sw);
+        throwable.printStackTrace(pw);
+        pw.flush();
+        LineNumberReader reader = new LineNumberReader(
+                new StringReader(sw.toString()));
+        ArrayList lines = new ArrayList();
+        try {
+          String line = reader.readLine();
+          while(line != null) {
+            lines.add(line);
+            line = reader.readLine();
+          }
+        } catch(IOException ex) {
+            if (ex instanceof InterruptedIOException) {
+                Thread.currentThread().interrupt();
+            }
+            lines.add(ex.toString());
+        }
+        String[] tempRep = new String[lines.size()];
+        lines.toArray(tempRep);
+        return tempRep;
+    }
+}

Added: logging/log4j/trunk/src/main/java/org/apache/log4j/EnhancedThrowableRenderer.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/EnhancedThrowableRenderer.java?rev=697315&amp;view=auto
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/EnhancedThrowableRenderer.java (added)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/EnhancedThrowableRenderer.java Fri Sep 19 19:37:56 2008
&lt; at &gt;&lt; at &gt; -0,0 +1,157 &lt; at &gt;&lt; at &gt;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j;
+
+import org.apache.log4j.spi.ThrowableRenderer;
+
+import java.io.File;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.security.CodeSource;
+
+/**
+ * Enhanced implementation of ThrowableRenderer.  Uses Throwable.getStackTrace
+ * if running on JDK 1.4 or later and delegates to DefaultThrowableRenderer.render
+ * on earlier virtual machines.
+ *
+ * &lt; at &gt;since 1.2.16
+ */
+public final class EnhancedThrowableRenderer implements ThrowableRenderer {
+    /**
+     * Throwable.getStackTrace() method.
+     */
+    private Method getStackTraceMethod;
+    /**
+     * StackTraceElement.getClassName() method.
+     */
+    private Method getClassNameMethod;
+
+
+    /**
+     * Construct new instance.
+     */
+    public EnhancedThrowableRenderer() {
+        try {
+            Class[] noArgs = null;
+            getStackTraceMethod = Throwable.class.getMethod("getStackTrace", noArgs);
+            Class ste = Class.forName("java.lang.StackTraceElement");
+            getClassNameMethod = ste.getMethod("getClassName", noArgs);
+        } catch(Exception ex) {
+        }
+    }
+
+    /**
+     * {&lt; at &gt;inheritDoc}
+     */
+    public String[] doRender(final Throwable throwable) {
+        if (getStackTraceMethod != null) {
+            try {
+                Object[] noArgs = null;
+                Object[] elements = (Object[]) getStackTraceMethod.invoke(throwable, noArgs);
+                String[] lines = new String[elements.length + 1];
+                lines[0] = throwable.toString();
+                for(int i = 0; i &lt; elements.length; i++) {
+                    lines[i+1] = formatElement(elements[i]);
+                }
+                return lines;
+            } catch(Exception ex) {
+            }
+        }
+        return DefaultThrowableRenderer.render(throwable);
+    }
+
+    /**
+     * Format one element from stack trace.
+     * &lt; at &gt;param element element, may not be null.
+     * &lt; at &gt;return string representation of element.
+     */
+    private String formatElement(final Object element) {
+        StringBuffer buf = new StringBuffer("\tat ");
+        buf.append(element);
+        try {
+            String className = getClassNameMethod.invoke(element, (Object[]) null).toString();
+            Class cls = findClass(className);
+            buf.append('[');
+            try {
+                CodeSource source = cls.getProtectionDomain().getCodeSource();
+                if (source != null) {
+                   URL locationURL = source.getLocation();
+                   if (locationURL != null) {
+                       //
+                       //   if a file: URL
+                       //
+                       if ("file".equals(locationURL.getProtocol())) {
+                           String path = locationURL.getPath();
+                           if (path != null) {
+                               //
+                               //  find the last file separator character
+                               //
+                               int lastSlash = path.lastIndexOf('/');
+                               int lastBack = path.lastIndexOf(File.separatorChar);
+                               if (lastBack &gt; lastSlash) {
+                                   lastSlash = lastBack;
+                               }
+                               //
+                               //  if no separator or ends with separator (a directory)
+                               //     then output the URL, otherwise just the file name.
+                               //
+                               if (lastSlash &lt;= 0 || lastSlash == path.length() - 1) {
+                                   buf.append(locationURL);
+                               } else {
+                                   buf.append(path.substring(lastSlash + 1));
+                               }
+                           }
+                       } else {
+                           buf.append(locationURL);
+                       }
+                   }
+                }
+            } catch(SecurityException ex) {
+            }
+            buf.append(':');
+            Package pkg = cls.getPackage();
+            if (pkg != null) {
+                String implVersion = pkg.getImplementationVersion();
+                if (implVersion != null) {
+                    buf.append(implVersion);
+                }
+            }
+            buf.append(']');
+        } catch(Exception ex) {
+        }
+        return buf.toString();
+    }
+
+    /**
+     * Find class given class name.
+     * &lt; at &gt;param className class name, may not be null.
+     * &lt; at &gt;return class, will not be null.
+     * &lt; at &gt;throws ClassNotFoundException thrown if class can not be found.
+     */
+    private Class findClass(final String className) throws ClassNotFoundException {
+     try {
+       return Thread.currentThread().getContextClassLoader().loadClass(className);
+     } catch (ClassNotFoundException e) {
+       try {
+         return Class.forName(className);
+       } catch (ClassNotFoundException e1) {
+          return getClass().getClassLoader().loadClass(className);
+      }
+    }
+  }
+
+}

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/Hierarchy.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/Hierarchy.java?rev=697315&amp;r1=697314&amp;r2=697315&amp;view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/Hierarchy.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/Hierarchy.java Fri Sep 19 19:37:56 2008
&lt; at &gt;&lt; at &gt; -36,10 +36,11 &lt; at &gt;&lt; at &gt;
 import org.apache.log4j.spi.HierarchyEventListener;
 import org.apache.log4j.spi.LoggerRepository;
 import org.apache.log4j.spi.RendererSupport;
-import org.apache.log4j.Appender;
 import org.apache.log4j.or.RendererMap;
 import org.apache.log4j.or.ObjectRenderer;
 import org.apache.log4j.helpers.LogLog;
+import org.apache.log4j.spi.ThrowableRendererSupport;
+import org.apache.log4j.spi.ThrowableRenderer;
 
 /**
    This class is specialized in retrieving loggers by name and also
&lt; at &gt;&lt; at &gt; -62,7 +63,7 &lt; at &gt;&lt; at &gt;
    &lt; at &gt;author Ceki G&amp;uuml;lc&amp;uuml;
 
 */
-public class Hierarchy implements LoggerRepository, RendererSupport {
+public class Hierarchy implements LoggerRepository, RendererSupport, ThrowableRendererSupport {
 
   private LoggerFactory defaultFactory;
   private Vector listeners;
&lt; at &gt;&lt; at &gt; -77,6 +78,8 &lt; at &gt;&lt; at &gt;
   boolean emittedNoAppenderWarning = false;
   boolean emittedNoResourceBundleWarning = false;
 
+  private ThrowableRenderer throwableRenderer = null;
+
   /**
      Create a new logger hierarchy.
 
&lt; at &gt;&lt; at &gt; -396,10 +399,11 &lt; at &gt;&lt; at &gt;
       }
     }
     rendererMap.clear();
+    throwableRenderer = null;
   }
 
   /**
-     Does mothing.
+     Does nothing.
 
      &lt; at &gt;deprecated Deprecated with no replacement.
    */
&lt; at &gt;&lt; at &gt; -418,6 +422,20 &lt; at &gt;&lt; at &gt;
     rendererMap.put(renderedClass, renderer);
   }
 
+    /**
+     * {&lt; at &gt;inheritDoc}
+     */
+  public void setThrowableRenderer(final ThrowableRenderer renderer) {
+      throwableRenderer = renderer;
+  }
+
+    /**
+     * {&lt; at &gt;inheritDoc}
+     */
+  public ThrowableRenderer getThrowableRenderer() {
+      return throwableRenderer;
+  }
+
 
   /**
      Shutting down a hierarchy will &lt;em&gt;safely&lt;/em&gt; close and remove

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/PropertyConfigurator.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/PropertyConfigurator.java?rev=697315&amp;r1=697314&amp;r2=697315&amp;view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/PropertyConfigurator.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/PropertyConfigurator.java Fri Sep 19 19:37:56 2008
&lt; at &gt;&lt; at &gt; -32,6 +32,8 &lt; at &gt;&lt; at &gt;
 import org.apache.log4j.spi.LoggerRepository;
 import org.apache.log4j.spi.OptionHandler;
 import org.apache.log4j.spi.RendererSupport;
+import org.apache.log4j.spi.ThrowableRenderer;
+import org.apache.log4j.spi.ThrowableRendererSupport;
 
 import java.io.FileInputStream;
 import java.io.InputStream;
&lt; at &gt;&lt; at &gt; -100,6 +102,7 &lt; at &gt;&lt; at &gt;
   static final String      APPENDER_PREFIX = "log4j.appender.";
   static final String      RENDERER_PREFIX = "log4j.renderer.";
   static final String      THRESHOLD_PREFIX = "log4j.threshold";
+  private static final String      THROWABLE_RENDERER_PREFIX = "log4j.throwableRenderer";
 
   /** Key for specifying the {&lt; at &gt;link org.apache.log4j.spi.LoggerFactory
       LoggerFactory}.  Currently set to "&lt;code&gt;log4j.loggerFactory&lt;/code&gt;".  */
&lt; at &gt;&lt; at &gt; -232,6 +235,24 &lt; at &gt;&lt; at &gt;
     log4j.renderer.my.Fruit=my.FruitRenderer
     &lt;/pre&gt;
 
+   &lt;h3&gt;ThrowableRenderer&lt;/h3&gt;
+
+   You can customize the way an instance of Throwable is
+   converted to String before being logged. This is done by
+   specifying an {&lt; at &gt;link org.apache.log4j.spi.ThrowableRenderer ThrowableRenderer}.
+
+   &lt;p&gt;The syntax is:
+
+   &lt;pre&gt;
+   log4j.throwableRenderer=fully.qualified.name.of.rendering.class
+   log4j.throwableRenderer.paramName=paramValue
+   &lt;/pre&gt;
+
+   As in,
+   &lt;pre&gt;
+   log4j.throwableRenderer=org.apache.log4j.EnhancedThrowableRenderer
+   &lt;/pre&gt;
+
     &lt;h3&gt;Logger Factories&lt;/h3&gt;
 
     The usage of custom logger factories is discouraged and no longer
&lt; at &gt;&lt; at &gt; -588,6 +609,23 &lt; at &gt;&lt; at &gt;
   RendererMap.addRenderer((RendererSupport) hierarchy, renderedClass,
   renderingClass);
 }
+      } else if (key.equals(THROWABLE_RENDERER_PREFIX)) {
+          if (hierarchy instanceof ThrowableRendererSupport) {
+            ThrowableRenderer tr = (ThrowableRenderer)
+                  OptionConverter.instantiateByKey(props,
+                          THROWABLE_RENDERER_PREFIX,
+                          org.apache.log4j.spi.ThrowableRenderer.class,
+                          null);
+            if(tr == null) {
+                LogLog.error(
+                    "Could not instantiate throwableRenderer.");
+            } else {
+                PropertySetter setter = new PropertySetter(tr);
+                setter.setProperties(props, THROWABLE_RENDERER_PREFIX + ".");
+                ((ThrowableRendererSupport) hierarchy).setThrowableRenderer(tr);
+
+            }
+          }
       }
     }
   }

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/spi/LoggingEvent.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/spi/LoggingEvent.java?rev=697315&amp;r1=697314&amp;r2=697315&amp;view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/spi/LoggingEvent.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/spi/LoggingEvent.java Fri Sep 19 19:37:56 2008
&lt; at &gt;&lt; at &gt; -162,7 +162,7 &lt; at &gt;&lt; at &gt;
     this.level = level;
     this.message = message;
     if(throwable != null) {
-      this.throwableInfo = new ThrowableInformation(throwable);
+      this.throwableInfo = new ThrowableInformation(throwable, logger);
     }
     timeStamp = System.currentTimeMillis();
   }
&lt; at &gt;&lt; at &gt; -187,7 +187,7 &lt; at &gt;&lt; at &gt;
     this.level = level;
     this.message = message;
     if(throwable != null) {
-      this.throwableInfo = new ThrowableInformation(throwable);
+      this.throwableInfo = new ThrowableInformation(throwable, logger);
     }
 
     this.timeStamp = timeStamp;

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/spi/ThrowableInformation.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/spi/ThrowableInformation.java?rev=697315&amp;r1=697314&amp;r2=697315&amp;view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/spi/ThrowableInformation.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/spi/ThrowableInformation.java Fri Sep 19 19:37:56 2008
&lt; at &gt;&lt; at &gt; -17,8 +17,8 &lt; at &gt;&lt; at &gt;
 
 package org.apache.log4j.spi;
 
-import java.io.*;
-import java.util.ArrayList;
+import org.apache.log4j.Category;
+import org.apache.log4j.DefaultThrowableRenderer;
 
 /**
   * ThrowableInformation is log4j's internal representation of
&lt; at &gt;&lt; at &gt; -38,6 +38,7 &lt; at &gt;&lt; at &gt;
   static final long serialVersionUID = -4748765566864322735L;
 
   private transient Throwable throwable;
+  private transient Category category;
   private String[] rep;
 
   public
&lt; at &gt;&lt; at &gt; -46,6 +47,17 &lt; at &gt;&lt; at &gt;
   }
 
     /**
+     * Create a new instance.
+     * &lt; at &gt;param throwable throwable, may not be null.
+     * &lt; at &gt;param category category used to obtain ThrowableRenderer, may be null.
+     * &lt; at &gt;since 1.2.16
+     */
+  public ThrowableInformation(Throwable throwable, Category category) {
+      this.throwable = throwable;
+      this.category = category;
+  }
+
+    /**
      * Create new instance.
      * &lt; at &gt;since 1.2.15
      * &lt; at &gt;param r String representation of throwable.
&lt; at &gt;&lt; at &gt; -62,31 +74,20 &lt; at &gt;&lt; at &gt;
     return throwable;
   }
 
-  public
-  String[] getThrowableStrRep() {
+  public synchronized String[] getThrowableStrRep() {
     if(rep == null) {
-      StringWriter sw = new StringWriter();
-      PrintWriter pw = new PrintWriter(sw);
-      throwable.printStackTrace(pw);
-      pw.flush();
-      LineNumberReader reader = new LineNumberReader(
-              new StringReader(sw.toString()));
-      ArrayList lines = new ArrayList();
-      try {
-        String line = reader.readLine();
-        while(line != null) {
-          lines.add(line);
-          line = reader.readLine();
-        }
-      } catch(IOException ex) {
-          if (ex instanceof InterruptedIOException) {
-              Thread.currentThread().interrupt();
+      ThrowableRenderer renderer = null;
+      if (category != null) {
+          LoggerRepository repo = category.getLoggerRepository();
+          if (repo instanceof ThrowableRendererSupport) {
+              renderer = ((ThrowableRendererSupport) repo).getThrowableRenderer();
           }
-          lines.add(ex.toString());
       }
-      String[] tempRep = new String[lines.size()];
-      lines.toArray(tempRep);
-      rep = tempRep;
+      if (renderer == null) {
+          rep = DefaultThrowableRenderer.render(throwable);
+      } else {
+          rep = renderer.doRender(throwable);
+      }
     }
     return (String[]) rep.clone();
   }

Added: logging/log4j/trunk/src/main/java/org/apache/log4j/spi/ThrowableRenderer.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/spi/ThrowableRenderer.java?rev=697315&amp;view=auto
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/spi/ThrowableRenderer.java (added)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/spi/ThrowableRenderer.java Fri Sep 19 19:37:56 2008
&lt; at &gt;&lt; at &gt; -0,0 +1,33 &lt; at &gt;&lt; at &gt;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j.spi;
+
+/**
+ * Implemented by classes that render instances of
+ * java.lang.Throwable (exceptions and errors)
+ * into a string representation.
+ *
+ * &lt; at &gt;since 1.2.16
+ */
+public interface ThrowableRenderer {
+    /**
+     * Render Throwable.
+     * &lt; at &gt;param t throwable, may not be null.
+     * &lt; at &gt;return String representation.
+     */
+    public String[] doRender(Throwable t);
+}

Added: logging/log4j/trunk/src/main/java/org/apache/log4j/spi/ThrowableRendererSupport.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/spi/ThrowableRendererSupport.java?rev=697315&amp;view=auto
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/spi/ThrowableRendererSupport.java (added)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/spi/ThrowableRendererSupport.java Fri Sep 19 19:37:56 2008
&lt; at &gt;&lt; at &gt; -0,0 +1,37 &lt; at &gt;&lt; at &gt;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j.spi;
+
+/**
+ * Implemented by logger repositories that support configurable
+ * rendering of Throwables.
+ *
+ * &lt; at &gt;since 1.2.16
+ */
+public interface ThrowableRendererSupport {
+    /**
+     * Get throwable renderer.
+     * &lt; at &gt;return throwable renderer, may be null.
+     */
+    ThrowableRenderer getThrowableRenderer();
+
+    /**
+     * Set throwable renderer.
+     * &lt; at &gt;param renderer renderer, may be null.
+     */
+    void setThrowableRenderer(ThrowableRenderer renderer);
+}

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/xml/DOMConfigurator.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/xml/DOMConfigurator.java?rev=697315&amp;r1=697314&amp;r2=697315&amp;view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/xml/DOMConfigurator.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/xml/DOMConfigurator.java Fri Sep 19 19:37:56 2008
&lt; at &gt;&lt; at &gt; -35,6 +35,8 &lt; at &gt;&lt; at &gt;
 import org.apache.log4j.spi.LoggerFactory;
 import org.apache.log4j.spi.LoggerRepository;
 import org.apache.log4j.spi.RendererSupport;
+import org.apache.log4j.spi.ThrowableRenderer;
+import org.apache.log4j.spi.ThrowableRendererSupport;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.NamedNodeMap;
&lt; at &gt;&lt; at &gt; -89,6 +91,7 &lt; at &gt;&lt; at &gt;
   static final String CONFIGURATION_TAG = "log4j:configuration";
   static final String OLD_CONFIGURATION_TAG = "configuration";
   static final String RENDERER_TAG      = "renderer";
+  private static final String THROWABLE_RENDERER_TAG = "throwableRenderer";
   static final String APPENDER_TAG = "appender";
   static final String APPENDER_REF_TAG = "appender-ref";  
   static final String PARAM_TAG    = "param";
&lt; at &gt;&lt; at &gt; -591,6 +594,49 &lt; at &gt;&lt; at &gt;
     }
   }
 
+    /**
+     * Parses throwable renderer.
+     * &lt; at &gt;param element throwableRenderer element.
+     * &lt; at &gt;return configured throwable renderer.
+     * &lt; at &gt;since 1.2.16.
+     */
+    protected ThrowableRenderer parseThrowableRenderer(final Element element) {
+        String className = subst(element.getAttribute(CLASS_ATTR));
+        LogLog.debug("Parsing throwableRenderer of class: \""+className+"\"");
+        try {
+          Object instance = Loader.loadClass(className).newInstance();
+          ThrowableRenderer tr   = (ThrowableRenderer)instance;
+          PropertySetter propSetter = new PropertySetter(tr);
+
+          NodeList params = element.getChildNodes();
+          final int length = params.getLength();
+
+          for (int loop = 0; loop &lt; length; loop++) {
+                Node currentNode = (Node)params.item(loop);
+                if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
+                    Element currentElement = (Element) currentNode;
+                    String tagName = currentElement.getTagName();
+                    if(tagName.equals(PARAM_TAG)) {
+                        setParameter(currentElement, propSetter);
+                    } else {
+                        parseUnrecognizedElement(instance, currentElement, props);
+                    }
+                }
+          }
+
+          propSetter.activate();
+          return tr;
+        }
+        catch (Exception oops) {
+            if (oops instanceof InterruptedException || oops instanceof InterruptedIOException) {
+                Thread.currentThread().interrupt();
+            }
+            LogLog.error("Could not create the ThrowableRenderer. Reported error follows.",
+               oops);
+          return null;
+        }
+    }
+
   /**
      Used internally to parse a level  element.
   */
&lt; at &gt;&lt; at &gt; -950,7 +996,14 &lt; at &gt;&lt; at &gt;
   parseRoot(currentElement);
 } else if(tagName.equals(RENDERER_TAG)) {
   parseRenderer(currentElement);
-} else if (!(tagName.equals(APPENDER_TAG)
+    } else if(tagName.equals(THROWABLE_RENDERER_TAG)) {
+        if (repository instanceof ThrowableRendererSupport) {
+            ThrowableRenderer tr = parseThrowableRenderer(currentElement);
+            if (tr != null) {
+                ((ThrowableRendererSupport) repository).setThrowableRenderer(tr);
+            }
+        }
+    } else if (!(tagName.equals(APPENDER_TAG)
             || tagName.equals(CATEGORY_FACTORY_TAG)
             || tagName.equals(LOGGER_FACTORY_TAG))) {
         quietParseUnrecognizedElement(repository, currentElement, props);

Modified: logging/log4j/trunk/src/main/resources/org/apache/log4j/xml/log4j.dtd
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/resources/org/apache/log4j/xml/log4j.dtd?rev=697315&amp;r1=697314&amp;r2=697315&amp;view=diff
==============================================================================
--- logging/log4j/trunk/src/main/resources/org/apache/log4j/xml/log4j.dtd (original)
+++ logging/log4j/trunk/src/main/resources/org/apache/log4j/xml/log4j.dtd Fri Sep 19 19:37:56 2008
&lt; at &gt;&lt; at &gt; -24,7 +24,8 &lt; at &gt;&lt; at &gt;
 elements,appender elements, categories and an optional root
 element. --&gt;
 
-&lt;!ELEMENT log4j:configuration (renderer*, appender*,plugin*, (category|logger)*,root?,
+&lt;!ELEMENT log4j:configuration (renderer*, throwableRenderer?,
+                               appender*,plugin*, (category|logger)*,root?,
                                (categoryFactory|loggerFactory)?)&gt;
 
 &lt;!-- The "threshold" attribute takes a level value below which --&gt;
&lt; at &gt;&lt; at &gt; -56,6 +57,14 &lt; at &gt;&lt; at &gt;
   renderingClass CDATA #REQUIRED
 &gt;
 
+&lt;!--  throwableRenderer allows the user to customize the conversion
+         of exceptions to a string representation.  --&gt;
+&lt;!ELEMENT throwableRenderer (param*)&gt;
+&lt;!ATTLIST throwableRenderer
+  class  CDATA #REQUIRED
+&gt;
+
+
 &lt;!-- Appenders must have a name and a class. --&gt;
 &lt;!-- Appenders may contain an error handler, a layout, optional parameters --&gt;
 &lt;!-- and filters. They may also reference (or include) other appenders. --&gt;

Added: logging/log4j/trunk/tests/input/xml/throwableRenderer1.xml
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/tests/input/xml/throwableRenderer1.xml?rev=697315&amp;view=auto
==============================================================================
--- logging/log4j/trunk/tests/input/xml/throwableRenderer1.xml (added)
+++ logging/log4j/trunk/tests/input/xml/throwableRenderer1.xml Fri Sep 19 19:37:56 2008
&lt; at &gt;&lt; at &gt; -0,0 +1,25 &lt; at &gt;&lt; at &gt;
+&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
+&lt;!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"&gt;
+&lt;!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+--&gt;
+
+&lt;log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'&gt;
+
+    &lt;throwableRenderer class="org.apache.log4j.xml.DOMTestCase$MockThrowableRenderer"&gt;
+        &lt;param name="showVersion" value="false"/&gt;
+    &lt;/throwableRenderer&gt;
+&lt;/log4j:configuration&gt;

Modified: logging/log4j/trunk/tests/src/java/org/apache/log4j/CoreTestSuite.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/tests/src/java/org/apache/log4j/CoreTestSuite.java?rev=697315&amp;r1=697314&amp;r2=697315&amp;view=diff
==============================================================================
--- logging/log4j/trunk/tests/src/java/org/apache/log4j/CoreTestSuite.java (original)
+++ logging/log4j/trunk/tests/src/java/org/apache/log4j/CoreTestSuite.java Fri Sep 19 19:37:56 2008
&lt; at &gt;&lt; at &gt; -52,6 +52,8 &lt; at &gt;&lt; at &gt;
         s.addTestSuite(org.apache.log4j.PropertyConfiguratorTest.class);
         s.addTestSuite(org.apache.log4j.net.SMTPAppenderTest.class);
         s.addTestSuite(org.apache.log4j.net.TelnetAppenderTest.class);
+        s.addTestSuite(org.apache.log4j.DefaultThrowableRendererTest.class);
+        s.addTestSuite(org.apache.log4j.EnhancedThrowableRendererTest.class);
         return s;
     }
 }

Added: logging/log4j/trunk/tests/src/java/org/apache/log4j/DefaultThrowableRendererTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/tests/src/java/org/apache/log4j/DefaultThrowableRendererTest.java?rev=697315&amp;view=auto
==============================================================================
--- logging/log4j/trunk/tests/src/java/org/apache/log4j/DefaultThrowableRendererTest.java (added)
+++ logging/log4j/trunk/tests/src/java/org/apache/log4j/DefaultThrowableRendererTest.java Fri Sep 19 19:37:56 2008
&lt; at &gt;&lt; at &gt; -0,0 +1,37 &lt; at &gt;&lt; at &gt;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j;
+
+import junit.framework.TestCase;
+import org.apache.log4j.spi.ThrowableRenderer;
+
+public class DefaultThrowableRendererTest extends TestCase {
+    public DefaultThrowableRendererTest(final String name) {
+        super(name);
+    }
+
+    public void testDefaultRender() {
+        ThrowableRenderer r = new DefaultThrowableRenderer();
+        Exception ex = new Exception();
+        String[] strRep = r.doRender(ex);
+        assertNotNull(strRep);
+        assertTrue(strRep.length &gt; 0);
+        for(int i = 0; i &lt; strRep.length; i++) {
+            assertNotNull(strRep[i]);
+        }
+    }
+}

Added: logging/log4j/trunk/tests/src/java/org/apache/log4j/EnhancedThrowableRendererTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/tests/src/java/org/apache/log4j/EnhancedThrowableRendererTest.java?rev=697315&amp;view=auto
==============================================================================
--- logging/log4j/trunk/tests/src/java/org/apache/log4j/EnhancedThrowableRendererTest.java (added)
+++ logging/log4j/trunk/tests/src/java/org/apache/log4j/EnhancedThrowableRendererTest.java Fri Sep 19 19:37:56 2008
&lt; at &gt;&lt; at &gt; -0,0 +1,48 &lt; at &gt;&lt; at &gt;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j;
+
+import junit.framework.TestCase;
+import org.apache.log4j.spi.ThrowableRenderer;
+
+/**
+ * Test for EnhancedThrowableRenderer.
+ *
+ */
+public class EnhancedThrowableRendererTest extends TestCase {
+    /**
+     * Construct new instance.
+     * &lt; at &gt;param name test name.
+     */
+    public EnhancedThrowableRendererTest(final String name) {
+        super(name);
+    }
+
+    /**
+     * Render simple exception.
+     */
+    public void testEnhancedRender() {
+        ThrowableRenderer r = new EnhancedThrowableRenderer();
+        Exception ex = new Exception();
+        String[] strRep = r.doRender(ex);
+        assertNotNull(strRep);
+        assertTrue(strRep.length &gt; 0);
+        for(int i = 0; i &lt; strRep.length; i++) {
+            assertNotNull(strRep[i]);
+        }
+    }
+}

Modified: logging/log4j/trunk/tests/src/java/org/apache/log4j/PatternLayoutTestCase.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/tests/src/java/org/apache/log4j/PatternLayoutTestCase.java?rev=697315&amp;r1=697314&amp;r2=697315&amp;view=diff
==============================================================================
--- logging/log4j/trunk/tests/src/java/org/apache/log4j/PatternLayoutTestCase.java (original)
+++ logging/log4j/trunk/tests/src/java/org/apache/log4j/PatternLayoutTestCase.java Fri Sep 19 19:37:56 2008
&lt; at &gt;&lt; at &gt; -285,6 +285,7 &lt; at &gt;&lt; at &gt;
     assertTrue(Compare.compare(FILTERED, "witness/patternLayout.14"));
   }
 
+
   void common() {
     String oldThreadName = Thread.currentThread().getName();
     Thread.currentThread().setName("main");

Modified: logging/log4j/trunk/tests/src/java/org/apache/log4j/PropertyConfiguratorTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/tests/src/java/org/apache/log4j/PropertyConfiguratorTest.java?rev=697315&amp;r1=697314&amp;r2=697315&amp;view=diff
==============================================================================
--- logging/log4j/trunk/tests/src/java/org/apache/log4j/PropertyConfiguratorTest.java (original)
+++ logging/log4j/trunk/tests/src/java/org/apache/log4j/PropertyConfiguratorTest.java Fri Sep 19 19:37:56 2008
&lt; at &gt;&lt; at &gt; -27,7 +27,10 &lt; at &gt;&lt; at &gt;
 import org.apache.log4j.spi.OptionHandler;
 import org.apache.log4j.spi.Filter;
 import org.apache.log4j.spi.LoggingEvent;
+import org.apache.log4j.spi.ThrowableRenderer;
+import org.apache.log4j.spi.ThrowableRendererSupport;
 import org.apache.log4j.varia.LevelRangeFilter;
+import org.apache.log4j.helpers.OptionConverter;
 
 /**
  * Test property configurator.
&lt; at &gt;&lt; at &gt; -267,4 +270,51 &lt; at &gt;&lt; at &gt;
         LogManager.resetConfiguration();
     }
 
+
+    /**
+     * Mock ThrowableRenderer for testThrowableRenderer.  See bug 45721.
+     */
+    public static class MockThrowableRenderer implements ThrowableRenderer, OptionHandler {
+        private boolean activated = false;
+        private boolean showVersion = true;
+
+        public MockThrowableRenderer() {
+        }
+
+        public void activateOptions() {
+            activated = true;
+        }
+
+        public boolean isActivated() {
+            return activated;
+        }
+
+        public String[] doRender(final Throwable t) {
+            return new String[0];
+        }
+
+        public void setShowVersion(boolean v) {
+            showVersion = v;
+        }
+
+        public boolean getShowVersion() {
+            return showVersion;
+        }
+    }
+
+    /**
+     * Test of log4j.throwableRenderer support.  See bug 45721.
+     */
+    public void testThrowableRenderer() {
+        Properties props = new Properties();
+        props.put("log4j.throwableRenderer", "org.apache.log4j.PropertyConfiguratorTest$MockThrowableRenderer");
+        props.put("log4j.throwableRenderer.showVersion", "false");
+        PropertyConfigurator.configure(props);
+        ThrowableRendererSupport repo = (ThrowableRendererSupport) LogManager.getLoggerRepository();
+        MockThrowableRenderer renderer = (MockThrowableRenderer) repo.getThrowableRenderer();
+        LogManager.resetConfiguration();
+        assertNotNull(renderer);
+        assertEquals(true, renderer.isActivated());
+        assertEquals(false, renderer.getShowVersion());
+    }
 }

Modified: logging/log4j/trunk/tests/src/java/org/apache/log4j/xml/DOMTestCase.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/tests/src/java/org/apache/log4j/xml/DOMTestCase.java?rev=697315&amp;r1=697314&amp;r2=697315&amp;view=diff
==============================================================================
--- logging/log4j/trunk/tests/src/java/org/apache/log4j/xml/DOMTestCase.java (original)
+++ logging/log4j/trunk/tests/src/java/org/apache/log4j/xml/DOMTestCase.java Fri Sep 19 19:37:56 2008
&lt; at &gt;&lt; at &gt; -24,9 +24,13 &lt; at &gt;&lt; at &gt;
 import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
 import org.apache.log4j.VectorAppender;
+import org.apache.log4j.PropertyConfigurator;
 import org.apache.log4j.spi.ErrorHandler;
 import org.apache.log4j.spi.LoggerFactory;
 import org.apache.log4j.spi.LoggingEvent;
+import org.apache.log4j.spi.ThrowableRenderer;
+import org.apache.log4j.spi.OptionHandler;
+import org.apache.log4j.spi.ThrowableRendererSupport;
 import org.apache.log4j.util.Compare;
 import org.apache.log4j.util.ControlFilter;
 import org.apache.log4j.util.Filter;
&lt; at &gt;&lt; at &gt; -36,6 +40,8 &lt; at &gt;&lt; at &gt;
 import org.apache.log4j.util.SunReflectFilter;
 import org.apache.log4j.util.Transformer;
 
+import java.util.Properties;
+
 public class DOMTestCase extends TestCase {
 
   static String TEMP_A1 = "output/temp.A1";
&lt; at &gt;&lt; at &gt; -332,4 +338,48 &lt; at &gt;&lt; at &gt;
       assertEquals("output/subst-test.A1", file);
   }
 
+    /**
+     * Mock ThrowableRenderer for testThrowableRenderer.  See bug 45721.
+     */
+    public static class MockThrowableRenderer implements ThrowableRenderer, OptionHandler {
+        private boolean activated = false;
+        private boolean showVersion = true;
+
+        public MockThrowableRenderer() {
+        }
+
+        public void activateOptions() {
+            activated = true;
+        }
+
+        public boolean isActivated() {
+            return activated;
+        }
+
+        public String[] doRender(final Throwable t) {
+            return new String[0];
+        }
+
+        public void setShowVersion(boolean v) {
+            showVersion = v;
+        }
+
+        public boolean getShowVersion() {
+            return showVersion;
+        }
+    }
+
+    /**
+     * Test of log4j.throwableRenderer support.  See bug 45721.
+     */
+    public void testThrowableRenderer1() {
+        DOMConfigurator.configure("input/xml/throwableRenderer1.xml");
+        ThrowableRendererSupport repo = (ThrowableRendererSupport) LogManager.getLoggerRepository();
+        MockThrowableRenderer renderer = (MockThrowableRenderer) repo.getThrowableRenderer();
+        LogManager.resetConfiguration();
+        assertNotNull(renderer);
+        assertEquals(true, renderer.isActivated());
+        assertEquals(false, renderer.getShowVersion());
+    }
+
 }
</description>
    <dc:creator>carnold&lt; at &gt;apache.org</dc:creator>
    <dc:date>2008-09-20T02:37:56</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14361">
    <title>DO NOT REPLY [Bug 45825] New: lack of synchronization in ThrowableInformation</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14361</link>
    <description>https://issues.apache.org/bugzilla/show_bug.cgi?id=45825

           Summary: lack of synchronization in ThrowableInformation
           Product: Log4j
           Version: 1.2
          Platform: PC
        OS/Version: Windows XP
            Status: NEW
          Severity: major
          Priority: P2
         Component: Other
        AssignedTo: log4j-dev&lt; at &gt;logging.apache.org
        ReportedBy: borysb&lt; at &gt;gmail.com


Log4j version 1.2.15.
Method getThrowableStrRep in org.apache.log4j.spi.ThrowableInformation should
be synchronized in some way. The variable rep can be read by one thread (for
example AsynsAppender) in line 72, while another is in line 91
(lines.toArray(rep)). This may cause rep to contain some nulls. It leads to
NullPointerException at java.io.Writer.write(Writer.java:140). Stacktrace:

java.lang.NullPointerException   
 at java.io.Writer.write(Writer.java:140)   
 at org.apache.log4j.helpers.QuietWriter.write(QuietWriter.java:48)   
 at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:309)   
 at org.apache.log4j.WriterAppender.append(WriterAppender.java:160)   
 at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)   
 at
org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66) 
 at org.apache.log4j.Category.callAppenders(Category.java:206)   
 at org.apache.log4j.Category.forcedLog(Category.java:391)   
 at org.apache.log4j.Category.info(Category.java:683)


</description>
    <dc:creator>bugzilla&lt; at &gt;apache.org</dc:creator>
    <dc:date>2008-09-17T14:54:10</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14358">
    <title>DO NOT REPLY [Bug 45816] New: Not able to change Threshold level of any appender</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14358</link>
    <description>https://issues.apache.org/bugzilla/show_bug.cgi?id=45816

           Summary: Not able to change Threshold level of any appender
           Product: Log4j
           Version: 1.2
          Platform: All
        OS/Version: Windows XP
            Status: NEW
          Severity: critical
          Priority: P2
         Component: Other
        AssignedTo: log4j-dev&lt; at &gt;logging.apache.org
        ReportedBy: shweta_naik&lt; at &gt;persistent.co.in


I am using lo4j.xml for logging
In my xml i ve add one consoleappender &amp; set this Threshold level to debug
even for rootlogger i have set level as info.
so even i tried calling debug message on console it dosent print debug msg as
root lelev is info.
but reverse is working as if i set root loglevel to debug &amp; cosole threshold to
info then it will print only info message on console.

but i want it should work for previous condition.
I am not getting why it is happening.
my log4j.xml is follows

&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"&gt;
&lt;log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
        debug="false"&gt;

        &lt;!-- ============================== --&gt;
        &lt;!-- Append messages to the console --&gt;
        &lt;!-- ============================== --&gt;
        &lt;appender name="CONSOLE_LOG"
                class="org.apache.log4j.ConsoleAppender"&gt;
        &lt;param name="Threshold" value="DEBUG" /&gt;                
                &lt;layout class="org.apache.log4j.TTCCLayout"&gt;
                &lt;param name="DateFormat" value="yyyy-MM-dd HH:mm:ss z"/&gt;
                &lt;param name="TimeZone" value="UTC"/&gt;
                &lt;param name="CategoryPrefixing" value="false"/&gt;                 
                &lt;/layout&gt;
        &lt;/appender&gt;


        &lt;root&gt;
                &lt;level value="info"&gt;&lt;/level&gt;
                &lt;appender-ref ref="CONSOLE_LOG" /&gt;

        &lt;/root&gt;



&lt;/log4j:configuration&gt;

plz help.


</description>
    <dc:creator>bugzilla&lt; at &gt;apache.org</dc:creator>
    <dc:date>2008-09-16T04:45:43</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14357">
    <title>Bug report for Log4j [2008/09/14]</title>
    <link>http://comments.gmane.org/gmane.comp.jakarta.log4j.devel/14357</link>
    <description>+---------------------------------------------------------------------------+
| Bugzilla Bug ID                                                           |
|     +---------------------------------------------------------------------+
|     | Status: UNC=Unconfirmed NEW=New         ASS=Assigned                |
|     |         OPN=Reopened    VER=Verified    (Skipped Closed/Resolved)   |
|     |   +-----------------------------------------------------------------+
|     |   | Severity: BLK=Blocker CRI=Critical  REG=Regression  MAJ=Major   |
|     |   |           MIN=Minor   NOR=Normal    ENH=Enhancement TRV=Trivial |
|     |   |   +-------------------------------------------------------------+
|     |   |   | Date Posted                                                 |
|     |   |   |          +--------------------------------------------------+
|     |   |   |          | Description                                      |
|     |   |   |          |                                                  |
|13099|Opn|Nor|2002-09-27|DOMConfigurator ignores category factory setting  |
|17887|Opn|Maj|2003-03-11|RollingFileAppender does not work for 10 threads  |
|20395|Inf|Enh|2003-06-01|PreparedStatementAppender Enhancement             |
|23329|Ass|Enh|2003-09-22|&lt;logger&gt; element in XML config should support reso|
|25355|Ass|Enh|2003-12-09|allow to require "TLS/SSL only" for outgoing mails|
|26084|Inf|Nor|2004-01-13|Log Event detail panel does not show special chara|
|27363|Inf|Enh|2004-03-02|JNI based SyslogAppender                          |
|27367|Inf|Enh|2004-03-02|NetSendAppender                                   |
|28647|Ass|Enh|2004-04-28|Add "Flush on Level" capability to FileAppender   |
|29244|Inf|Nor|2004-05-27|Preserve XML content in log messages when using XM|
|29304|New|Nor|2004-05-30|Starting XMLSocketAppender from config file       |
|29305|New|Nor|2004-05-30|Chainsaw doesn't see locationinfo from XMLSocketRe|
|29735|New|Nor|2004-06-22|Receiver list display error  when receiver has no |
|30055|New|Nor|2004-07-12|Problem with registering Appenders with the same n|
|30407|Inf|Maj|2004-07-30|Externally rolled file problem                    |
|30888|New|Maj|2004-08-27|Chainsaw mixes files in same panel                |
|30890|New|Min|2004-08-27|Newly opened log file should get focus            |
|30892|New|Min|2004-08-27|Log files cannot be closed                        |
|31089|New|Nor|2004-09-07|Does not accept ISO8601 dates in focus field      |
|31178|Inf|Cri|2004-09-11|Exception using Chainsaw for simple debugging     |
|31179|Ass|Enh|2004-09-11|Implement Chainsaw as Eclipse stand-alone applicat|
|33278|New|Min|2005-01-27|NPE thrown durring daily log file rollover        |
|33493|Inf|Enh|2005-02-10|contribution to log4j: servlet diagnostic context |
|33717|New|Nor|2005-02-23|Leaving out %throwable in ConversionPattern adds t|
|34440|New|Nor|2005-04-13|sandbox:IMAppender - comma-seperated recipient lis|
|34491|Ver|Nor|2005-04-18|Missing include in build.jms target results in mis|
|34651|New|Enh|2005-04-27|allow for a header on top of every rolled file    |
|34738|New|Nor|2005-05-04|Chainsaw does not remember what Columns are select|
|34945|Inf|Nor|2005-05-17|ThrowableInformation has dubious Stack Trace extra|
|34974|Inf|Cri|2005-05-19|Exception when running a Pluglet                  |
|35180|New|Min|2005-06-02|Multiple lines "XML files (*.xml)" in drop down li|
|35239|Inf|Nor|2005-06-06|NullPointerException when saving displayed events |
|35563|Inf|Enh|2005-06-30|Syslog appender parametrability                   |
|35996|Inf|Enh|2005-08-03|Add support for ant-like &lt;property&gt; in log4j.xml  |
|36435|New|Enh|2005-08-31|Log4J RollingFileAppender under OpenVMS does not f|
|36654|Inf|Min|2005-09-14|Provide better error messages for "Please initiali|
|36789|Inf|Nor|2005-09-23|Empty control flow statement in org.apache.log4j.l|
|36860|New|Enh|2005-09-29|[jmx] Add ability to create a logger MBean for a n|
|37349|Ass|Nor|2005-11-03|DBAppender not working with jTDS driver           |
|37638|New|Nor|2005-11-25|logging doesn't fall back with FallbackErrorHandle|
|37734|Inf|Nor|2005-12-01|Customize Event ID and Event Category with NTEVent|
|37762|Ass|Enh|2005-12-02|RSSAppender or other approach.                    |
|38061|New|Nor|2005-12-28|Problem configuring an errorHandler using a proper|
|38363|Ass|Nor|2006-01-24|SecurityException during log output               |
|38394|Ver|Enh|2006-01-26|PropertySetter fails to print stacktrace if error |
|38395|Ver|Reg|2006-01-26|Unable to set threshold on appender via config fil|
|38406|Ver|Nor|2006-01-26|jdk1.4 dependencies in log4j 1.3 alpha            |
|38513|New|Nor|2006-02-05|[PATCH] Suggested unit test for JMSAppender       |
|38582|Ass|Nor|2006-02-08|Chainsaw does not include Receiver JavaDoc in dist|
|38590|Inf|Nor|2006-02-09|no space on device fails another instance         |
|38883|Opn|Nor|2006-03-07|LogFilePatternReceiver fails to process multi-line|
|38884|New|Nor|2006-03-07|null pointer exception displaying logs if number o|
|39690|Inf|Cri|2006-05-31|Initialization fail in J2EE Environment           |
|39691|Ass|Nor|2006-05-31|DBAppender doesn't log long events                |
|40068|New|Nor|2006-07-18|Add support for attach-on-demand API to chainsaw  |
|40124|New|Min|2006-07-27|startup (JWS) does not initialize ignored elements|
|40251|Opn|Min|2006-08-14|Hard coded JMX domain name for MBean instances    |
|40382|Inf|Maj|2006-09-01|Sysappender hangs during boot time on HP          |
|40385|Inf|Maj|2006-09-01|SocketServer cannot find config file when passed a|
|40472|New|Nor|2006-09-11|SettingsManager calls loadSettings with global set|
|40533|New|Nor|2006-09-18|Chainsaw not showing all logging statements       |
|40570|Inf|Blk|2006-09-21|RollingFileAppender does not rollover when the fil|
|40611|New|Trv|2006-09-27|Bad subclass example; NullPointerException in Logg|
|40736|Inf|Nor|2006-10-11|log4j delete permission denied                    |
|40889|Inf|Nor|2006-11-03|repeated entries in log after failure             |
|40990|Inf|Nor|2006-11-17|Cannot bind port or ip address for outgoing UDP so|
|41006|Inf|Enh|2006-11-20|Contributing XMLSocketHubReceiver                 |
|41214|Ass|Maj|2006-12-19|Deadlock with RollingFileAppender                 |
|41311|Inf|Min|2007-01-06|Please make TimeBasedRollingPolicy non-final?     |
|41316|New|Nor|2007-01-08|NPE when using RollingFileAppender in Tomcat.     |
|41547|Inf|Nor|2007-02-05|PropertyConfigurator and layout.contentType       |
|41799|New|Enh|2007-03-09|SyslogAppender should enable to customize Log4j.Le|
|41882|Inf|Nor|2007-03-18|IE7 problems with Log4J web site                  |
|41937|New|Nor|2007-03-23|Logs from some panels missing in custom expression|
|41980|Inf|Maj|2007-03-29|Log4j stop updating log file- version log4j-1.2.8 |
|42171|New|Nor|2007-04-19|SocketHubReceiver duplicates messages             |
|42189|Ass|Nor|2007-04-22|Add simple bridge for java.util.logging, with basi|
|42516|Inf|Nor|2007-05-24|Log4j failed to log file when packaged in Eclipse |
|42664|New|Enh|2007-06-14|JUL Appender                                      |
|42842|Opn|Nor|2007-07-09|Create a PUBLIC identifier for the log4j DTD      |
|42883|Opn|Nor|2007-07-12|'Welcome' and 'Drag &amp; Drop' panels can't be hidden|
|42933|Inf|Maj|2007-07-18|IllegalStateException thrown from FileAppender.clo|
|43061|Opn|Enh|2007-08-08|Flush appender regularty                          |
|43148|Ass|Nor|2007-08-16|LogFilePatternReceiver depends on jakarta-oro, cou|
|43277|New|Nor|2007-08-31|Add LogMF.entering, .exiting and .throwing methods|
|43282|Ass|Nor|2007-08-31|Add OSGi packaging info to log4j and companions   |
|43313|Inf|Nor|2007-09-05|log4j 1.2.16 release considerations and discussion|
|43403|Inf|Nor|2007-09-16|PatternLayout: new format modifer: prefix if non-e|
|43619|New|Enh|2007-10-13|Simple proposal for pluggable sys-props resolvers |
|43637|Inf|Nor|2007-10-16|SocketAppender.append(LoggingEvent) calls the Erro|
|43728|Inf|Cri|2007-10-29|Log file loss when specified file is locked by ano|
|43736|Ass|Nor|2007-10-30|Chainsaw does not honor encoding when loading XML |
|43820|New|Enh|2007-11-08|[PATCH] Layered Configurator Patch                |
|43879|Inf|Nor|2007-11-16|FileAppender writes Header multiple times         |
|43911|Inf|Nor|2007-11-20|logfiles not getting rolled over with RollingFileA|
|43923|Inf|Min|2007-11-21|JBOSS specific information in javadocs            |
|44038|Inf|Cri|2007-12-07|log4j is susceptible to exceptions thrown by Excep|
|44219|Inf|Nor|2008-01-13|'WARNING' for a log level is silently ignored/chan|
|44308|Inf|Enh|2008-01-28|[Patch] JMX component for managing Logger configur|
|44357|New|Enh|2008-02-05|List of property keys                             |
|44370|Inf|Reg|2008-02-06|MANIFEST.MF broken in log4j-1.2.15.jar            |
|44386|Opn|Nor|2008-02-10|NTEventLogAppender.dll for windows 64             |
|44526|Inf|Nor|2008-03-04|segmentation fault occuring when PropertyConfigura|
|44557|Inf|Nor|2008-03-07|no close call to Appender after replacing the root|
|44644|New|Nor|2008-03-20|Default ContentType for Layout is text/html which |
|44649|Inf|Nor|2008-03-20|JMS Hangs when a Root Appender                    |
|44700|Inf|Nor|2008-03-28|Log4J locks rolled log files                      |
|44727|Inf|Nor|2008-04-01|Add missing Logger#isErrorEnabled and isWarningEna|
|44834|Inf|Nor|2008-04-17|SimpleSocketServer looses buffered logs, produces |
|44839|Inf|Nor|2008-04-17|SyslogAppender logging to a UNIX domain socket    |
|44932|New|Enh|2008-05-05|improve DailyRollingFileAppender handling of rotat|
|44934|Inf|Enh|2008-05-05|add helper method to DailyRollingFileAppender to g|
|44945|New|Nor|2008-05-06|SyslogAppender not working                        |
|45029|Ass|Nor|2008-05-18|Additional unit tests for Filters in extras compan|
|45042|New|Nor|2008-05-19|Need a reliable way to detect misconfiguration    |
|45068|New|Enh|2008-05-22|Ability to copy contents from log-entries         |
|45109|New|Nor|2008-05-31|SMTPAppender uses wrong property for mail server  |
|45165|Ass|Enh|2008-06-09|Multifile Appender                                |
|45224|Inf|Nor|2008-06-17|Log 4j  giving nullpointer when reloading applicat|
|45231|Inf|Nor|2008-06-18|Clear appenders call on logger calls a helper whic|
|45236|Inf|Cri|2008-06-19|Wriring output to an out-dated file.              |
|45304|Ne