Final fields may be quite important depending on the class. We should really consider a change like making a field mutable carefully. Not that I am advocating for builders in the first place, I am not.
Gary <div>-------- Original message --------</div><div>From: Matt Sicker <boa...@gmail.com> </div><div>Date:06/15/2014 19:31 (GMT-05:00) </div><div>To: Log4J Developers List <log4j-dev@logging.apache.org> </div><div>Subject: Re: debug output </div><div> </div>Well, it could be done via the builders. The visit method just needs to accept a StringBuilder to continue building the log message. I'll take a look at this shortly. And in regards to builders versus factories, I actually have a third option that could reduce everything: prototypes. Instead of all the final fields we've got in the various plugins, they could start off in a default state, and then the setters and getters can be used as usual to configure it. This would probably be the most natural way to go about doing it. On 15 June 2014 18:04, Ralph Goers <ralph.go...@dslextreme.com> wrote: Do we need the builders? As I said, I prefer only one way for creating plugins. Ralph On Jun 15, 2014, at 2:49 PM, Remko Popma <remko.po...@gmail.com> wrote: I see. I agree that the original format is much nicer. Matt, do you think you can achieve this with the builders? Sent from my iPhone On 2014/06/16, at 1:29, Ralph Goers <ralph.go...@dslextreme.com> wrote: While you improved some of the existing messages, you really didm’t address what I wanted fixed. The previous debug logs would have had messages similar to: Calling createLayout on class org.apache.logging.log4j.core.layout.PatternLayout for element PatternLayout with params(pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n", Configuration(D:\rista\eclipsekws\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\log4j2.0-test\WEB-INF\classes\test-log4j.xml), null, charset="null", alwaysWriteExceptions="null") Calling createAppender on class org.apache.logging.log4j.core.appender.ConsoleAppender for element Console with params(PatternLayout(%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n), null, target="SYSTEM_OUT", name="console", follow="null", ignoreExceptions="null") Calling createAppenderRef on class org.apache.logging.log4j.core.config.AppenderRef for element appender-ref with params(ref="console", level="null", null) 2013-09-20 15:06:55,749 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig$RootLogger for element root with params(additivity="null", level="error", includeLocation="null", AppenderRef={console}, Properties={}, Configuration(D:\rista\eclipsekws\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\log4j2.0-test\WEB-INF\classes\test-log4j.xml), null) The current log emits stuff like: 2014-06-15 09:07:19,432 DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.XmlLayout]. Searching for builder factory method... 2014-06-15 09:07:19,435 DEBUG No builder factory method found in class org.apache.logging.log4j.core.layout.XmlLayout. 2014-06-15 09:07:19,435 DEBUG Still building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.XmlLayout]. Searching for factory method... 2014-06-15 09:07:19,436 DEBUG Found factory method [createLayout]: public static org.apache.logging.log4j.core.layout.XmlLayout org.apache.logging.log4j.core.layout.XmlLayout.createLayout(boolean,boolean,boolean,boolean,java.nio.charset.Charset). 2014-06-15 09:07:19,436 DEBUG Generating parameters for factory method [createLayout]... 2014-06-15 09:07:19,456 DEBUG Attribute(locationInfo="false") - no value specified, using default. 2014-06-15 09:07:19,456 DEBUG Attribute(properties="false") - no value specified, using default. 2014-06-15 09:07:19,457 DEBUG Attribute(complete="true") - no value specified, using default. 2014-06-15 09:07:19,457 DEBUG Attribute(compact="false") - no value specified, using default. 2014-06-15 09:07:19,457 DEBUG Attribute(charset="UTF-8") - no value specified, using default. 2014-06-15 09:07:19,587 DEBUG Built Plugin[name=layout] OK from factory method. 2014-06-15 09:07:19,588 DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.FileAppender]. Searching for builder factory method... 2014-06-15 09:07:19,588 DEBUG No builder factory method found in class org.apache.logging.log4j.core.appender.FileAppender. 2014-06-15 09:07:19,589 DEBUG Still building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.FileAppender]. Searching for factory method... 2014-06-15 09:07:19,589 DEBUG Found factory method [createAppender]: public static org.apache.logging.log4j.core.appender.FileAppender org.apache.logging.log4j.core.appender.FileAppender.createAppender(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,org.apache.logging.log4j.core.Layout,org.apache.logging.log4j.core.Filter,java.lang.String,java.lang.String,org.apache.logging.log4j.core.config.Configuration). 2014-06-15 09:07:19,589 DEBUG Generating parameters for factory method [createAppender]... 2014-06-15 09:07:19,595 DEBUG Attribute(fileName="target/XmlCompleteFileAppenderTest.log") 2014-06-15 09:07:19,596 DEBUG Attribute(append="false") 2014-06-15 09:07:19,596 DEBUG Attribute(locking="null") 2014-06-15 09:07:19,596 DEBUG Attribute(name="XmlFile") 2014-06-15 09:07:19,597 DEBUG Attribute(immediateFlush="false") 2014-06-15 09:07:19,597 DEBUG Attribute(ignoreExceptions="null") 2014-06-15 09:07:19,597 DEBUG Attribute(bufferedIo="null") 2014-06-15 09:07:19,598 DEBUG Attribute(bufferSize="null") 2014-06-15 09:07:19,598 DEBUG XMLLayout(org.apache.logging.log4j.core.layout.XmlLayout@5eef9f84) 2014-06-15 09:07:19,598 DEBUG Attribute(advertise="null") 2014-06-15 09:07:19,599 DEBUG Attribute(advertiseUri="null") 2014-06-15 09:07:19,599 DEBUG Configuration(/Users/rgoers/projects/apache/logging/log4j/log4j2/trunk/log4j-core/target/test-classes/XmlCompleteFileAppenderTest.xml) 2014-06-15 09:07:19,601 DEBUG Starting FileManager target/XmlCompleteFileAppenderTest.log The previous format was a lot more compact as it essentially showed you the parameters being passed to the factory method in one line while identifying the class it came from and the configuration element that triggered it. The new log emits that info as individual lines with a few messages that are just noise. Ralph On Jun 14, 2014, at 10:11 PM, Remko Popma <remko.po...@gmail.com> wrote: I've done some work on this, there may be more places to improve, I mainly focused on PluginBuilder and PluginAttributeVisitor. On Thu, Jun 12, 2014 at 2:09 AM, Matt Sicker <boa...@gmail.com> wrote: Yeah, I liked the prettier logging format. I was planning to add it back in, but it appears as though I completely forgot about it! The "new" format was a quick placeholder. I'll try and work on that this week. On 10 June 2014 19:47, Gary Gregory <garydgreg...@gmail.com> wrote: Maybe Matt can shed a light on this? Gary On Tue, Jun 10, 2014 at 8:43 PM, Ralph Goers <rgo...@apache.org> wrote: I don't know exactly what I would be vetoing. I have no problem with some of the refactoring. The commit(s) that changed the logging probably happened weeks ago and I am just noticing now. But yes, I want the logging aspect of the changes reverted back to what was previously being done. Sent from my iPad On Jun 10, 2014, at 5:34 PM, Gary Gregory <garydgreg...@gmail.com> wrote: Well, for Log4j Plugins, one way to configure should be plenty. I am OK with the factory method pattern, while it makes for some long signatures, I like that it is all in one place. May I suggest a simple "-1" reply on the ML on the changes to logging? Do you feel a VETO is inappropriate here? Gary On Tue, Jun 10, 2014 at 7:57 PM, Ralph Goers <rgo...@apache.org> wrote: I think the discussion was not on its own thread. I thought there was agreement that there should be only one way to configure plugins. I prefer the factory method simply because it would be a whole lot of effort to convert everything to a builder and I just don't think the benefit is worth the effort. I spent a lot of time making the debug output "nice" and easily understandable so I am a bit upset that it was tossed and replaced with what you see below. Ralph Sent from my iPad On Jun 10, 2014, at 4:31 PM, Gary Gregory <garydgreg...@gmail.com> wrote: On Tue, Jun 10, 2014 at 7:11 PM, Ralph Goers <ralph.go...@dslextreme.com> wrote: I am working on a new Appender and am noticing that the debug output is now far less useful than it used to be. I used to see the factory method being invoked with all of its parameters very nicely formatted. Now I see 2014-06-10 16:02:37,858 DEBUG No compatible method annotated with interface org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory found in class class org.apache.logging.log4j.web.appender.ServletAppender. 2014-06-10 16:02:37,858 DEBUG Found factory method class org.apache.logging.log4j.web.appender.ServletAppender.public static org.apache.logging.log4j.web.appender.ServletAppender org.apache.logging.log4j.web.appender.ServletAppender.createAppender(org.apache.logging.log4j.core.Layout,org.apache.logging.log4j.core.Filter,java.lang.String,java.lang.String). 2014-06-10 16:02:37,864 DEBUG Constructing plugin of type class org.apache.logging.log4j.web.appender.ServletAppender 2014-06-10 16:02:37,864 DEBUG PatternLayout(%m%n) 2014-06-10 16:02:37,864 DEBUG Constructing plugin of type class org.apache.logging.log4j.web.appender.ServletAppender 2014-06-10 16:02:37,865 DEBUG Constructing plugin of type class org.apache.logging.log4j.web.appender.ServletAppender 2014-06-10 16:02:37,865 DEBUG Attribute(name="Servlet") 2014-06-10 16:02:37,865 DEBUG Constructing plugin of type class org.apache.logging.log4j.web.appender.ServletAppender 2014-06-10 16:02:37,865 DEBUG Null string given to convert. Using default [null]. 2014-06-10 16:02:37,866 DEBUG Attribute(ignoreExceptions="null") This is far more verbose, repetitive, and is nowhere near as clear as it used to be. Can you please get the logging output back to the old format? Also, can we change PatternLayout back to a factory and remove the message about no builder factory being present? I think we need to decide how many ways there are to configure a plugin: factory, builder, and whatever else we've been discussing. This is getting quite confusing! I thought we had a thread going on the topic already... Gary Ralph -- E-Mail: garydgreg...@gmail.com | ggreg...@apache.org Java Persistence with Hibernate, Second Edition JUnit in Action, Second Edition Spring Batch in Action Blog: http://garygregory.wordpress.com Home: http://garygregory.com/ Tweet! http://twitter.com/GaryGregory -- E-Mail: garydgreg...@gmail.com | ggreg...@apache.org Java Persistence with Hibernate, Second Edition JUnit in Action, Second Edition Spring Batch in Action Blog: http://garygregory.wordpress.com Home: http://garygregory.com/ Tweet! http://twitter.com/GaryGregory -- E-Mail: garydgreg...@gmail.com | ggreg...@apache.org Java Persistence with Hibernate, Second Edition JUnit in Action, Second Edition Spring Batch in Action Blog: http://garygregory.wordpress.com Home: http://garygregory.com/ Tweet! http://twitter.com/GaryGregory -- Matt Sicker <boa...@gmail.com> -- Matt Sicker <boa...@gmail.com>