A good summary Curt. You'd be pointing us in the direction of making
log4j 1.2 more like 1.3 though.
I like the idea of breaking out the Receiver stuff into an optional
jar for 1.2. I can't remember if log4j1.2 had the Plugins stuff, but
even if it did, I'm sure I and others have made some changes to
that. Again, that could be ported, but we're starting to make a
significant 1.2 change, and wouldn't it make more sense to call it....
1.3? :)
As a very quick hack to 1.3, I was considering testing some 1.3
LoggingEvent changes to return MDC serialization compatibility, even
if it wasn't optimal.
On 11/04/2007, at 6:28 AM, Curt Arnold wrote:
I did an experiment of building chainsaw against the current SVN
for log4j 1.2 and have a rough analysis of the dependencies issues:
[javac] Compiling 102 source files to /Users/curta/ls-svn/
chainsaw/build
[javac] /Users/curta/ls-svn/chainsaw/src/java/org/apache/log4j/
chainsaw/ChainsawAppender.java:23: cannot find symbol
[javac] symbol : class Constants
[javac] location: package org.apache.log4j.helpers
[javac] import org.apache.log4j.helpers.Constants;
This error occurs in several files where chainsaw attempts to
access string constants APPLICATION_KEY, HOSTNAME_KEY and
LOG4J_ID_KEY. The easiest remedy would add these constants to
ChainsawConstants.
[javac] /Users/curta/ls-svn/chainsaw/src/java/org/apache/log4j/
chainsaw/ChainsawAppenderHandler.java:30: package
org.apache.log4j.rule does not exist
[javac] import org.apache.log4j.rule.ExpressionRule;
[javac] ^
[javac] /Users/curta/ls-svn/chainsaw/src/java/org/apache/log4j/
chainsaw/ChainsawAppenderHandler.java:31: package
org.apache.log4j.rule does not exist
[javac] import org.apache.log4j.rule.Rule;
Chainsaw makes extension use of the org.apache.log4j.rule package
that supports org.apache.log4j.filter.ExpressionFilter and
org.apache.log4j.LocationInfoFilter. Those filters may be useful
to a log4j 1.2.x user, so it may be useful to backport them to be
compatible with log4j 1.2.x and either incorporate them into log4j
1.2.x or make them available an add-on for log4j 1.2.x.
[javac] ^
[javac] /Users/curta/ls-svn/chainsaw/src/java/org/apache/log4j/
chainsaw/ChainsawAppenderHandler.java:33: cannot find symbol
[javac] symbol : class LoggerRepositoryEx
[javac] location: package org.apache.log4j.spi
[javac] import org.apache.log4j.spi.LoggerRepositoryEx;
[javac] ^
The LoggerRepositoryEx interface added methods to monitor the
addition of new loggers and appenders and several other functions.
Will need to review how these are used. If they are added, it
would likely have to be implemented in log4j 1.2.x itself.
[javac] /Users/curta/ls-svn/chainsaw/src/java/org/apache/log4j/
chainsaw/ChainsawAppenderHandler.java:29: cannot find symbol
[javac] symbol : class SocketReceiver
[javac] location: package org.apache.log4j.net
[javac] import org.apache.log4j.net.SocketReceiver;
[javac] ^
[javac] /Users/curta/ls-svn/chainsaw/src/java/org/apache/log4j/
chainsaw/LogUI.java:107: cannot find symbol
[javac] symbol : class SocketNodeEventListener
[javac] location: package org.apache.log4j.net
[javac] import org.apache.log4j.net.SocketNodeEventListener;
[javac] ^
[javac] /Users/curta/ls-svn/chainsaw/src/java/org/apache/log4j/
chainsaw/ChainsawAppenderHandler.java:34: cannot find symbol
[javac] symbol : class LoggingEventFieldResolver
[javac] location: package org.apache.log4j.spi
[javac] import org.apache.log4j.spi.LoggingEventFieldResolver;
[javac] ^
[javac] /Users/curta/ls-svn/chainsaw/src/java/org/apache/log4j/
chainsaw/ChainsawAppenderHandler.java:52: cannot find symbol
[javac] symbol : class LoggingEventFieldResolver
[javac] location: class
org.apache.log4j.chainsaw.ChainsawAppenderHandler
[javac] private final LoggingEventFieldResolver resolver =
LoggingEventFieldResolver
[javac] ^
[javac] ^
[javac] /Users/curta/ls-svn/chainsaw/src/java/org/apache/log4j/
chainsaw/receivers/PluginPropertyEditorPanel.java:54: cannot find
symbol
[javac] symbol : class SocketHubReceiver
[javac] location: package org.apache.log4j.net
[javac] import org.apache.log4j.net.SocketHubReceiver;
[javac] ^
[javac] /Users/curta/ls-svn/chainsaw/src/java/org/apache/log4j/
chainsaw/receivers/ReceiversPanel.java:71: cannot find symbol
[javac] symbol : class SocketNodeEventListener
[javac] location: package org.apache.log4j.net
[javac] import org.apache.log4j.net.SocketNodeEventListener;
[javac] ^
[javac] /Users/curta/ls-svn/chainsaw/src/java/org/apache/log4j/
chainsaw/receivers/ReceiversPanel.java:72: cannot find symbol
[javac] symbol : class SocketReceiver
[javac] location: package org.apache.log4j.net
[javac] import org.apache.log4j.net.SocketReceiver;
[javac] /Users/curta/ls-svn/chainsaw/src/java/org/apache/log4j/
chainsaw/receivers/ReceiversPanel.java:435: cannot find symbol
[javac] symbol : class Receiver
[javac] location: class
org.apache.log4j.chainsaw.receivers.ReceiversPanel
[javac] private Receiver getCurrentlySelectedReceiver() {
[javac] ^
[javac] /Users/curta/ls-svn/chainsaw/src/java/org/apache/log4j/
chainsaw/FileMenu.java:41: cannot find symbol
[javac] symbol : class UtilLoggingXMLDecoder
[javac] location: package org.apache.log4j.xml
[javac] import org.apache.log4j.xml.UtilLoggingXMLDecoder;
[javac] ^
[javac] /Users/curta/ls-svn/chainsaw/src/java/org/apache/log4j/
chainsaw/FileMenu.java:42: cannot find symbol
[javac] symbol : class XMLDecoder
[javac] location: package org.apache.log4j.xml
[javac] import org.apache.log4j.xml.XMLDecoder;
[javac] ^
I'm guessing all the receiver stuff is unlikely to be used anywhere
outside of Chainsaw. However, it might still be useful to package
them up as a distinct package.
[javac] /Users/curta/ls-svn/chainsaw/src/java/org/apache/log4j/
chainsaw/LogUI.java:106: package org.apache.log4j.joran does not exist
[javac] import org.apache.log4j.joran.JoranConfigurator;
[javac] ^
Likely could be changed back to DOMConfigurator.
[javac] /Users/curta/ls-svn/chainsaw/src/java/org/apache/log4j/
chainsaw/LogUI.java:108: package org.apache.log4j.plugins does not
exist
[javac] import org.apache.log4j.plugins.Plugin;
Chainsaw uses the plugins package internally and they are also used
in the log4j receivers. I think it would probably be best to keep
them with the receivers.
My suggestions would be to start two new sandbox projects, one for
the rule filters and one for the receivers+plugin. Alternately,
rules could go into log4j 1.2 and receivers+plugin could go
chainsaw. Change the org.apache.log4j.spi.Constant references to
org.apache.log4j.chainsaw.ChainsawConstant references and review
the usage LoggerRepositoryEx and DOMConfigurator.
I've confirmed that log4j 1.2.x does serialize the MDC content, it
is just that the log4j 1.3 deserialization doesn't pick it up.
Likely if Chainsaw was hosted in log4j 1.2, the MDC content would
show up for log4j 1.2 clients and disappear for log4j 1.3 clients.
I think it is possible that you might be able to write a custom
serialization that could read both log4j 1.2 and log4j 1.3
serialization. I'm skeptical that it could be done with default
serialization.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
Paul Smith
Core Engineering Manager
Aconex
The easy way to save time and money on your project
696 Bourke Street, Melbourne,
VIC 3000, Australia
Tel: +61 3 9240 0200 Fax: +61 3 9240 0299
Email: [EMAIL PROTECTED] www.aconex.com
This email and any attachments are intended solely for the addressee.
The contents may be privileged, confidential and/or subject to
copyright or other applicable law. No confidentiality or privilege is
lost by an erroneous transmission. If you have received this e-mail
in error, please let us know by reply e-mail and delete or destroy
this mail and all copies. If you are not the intended recipient of
this message you must not disseminate, copy or take any action in
reliance on it. The sender takes no responsibility for the effect of
this message upon the recipient's computer system.