...and another (shorter) way would be to add a comment for each parameter: factoryMethod( null, // loggerName null, // Marker null, // LoggerFQCN null, // Level null, // Message null, // Throwable null, // ContextMap null, // ContextStack null, // ThreadName null, // Location 0); // CurrentTime
On Mon, Jun 16, 2014 at 9:36 PM, Remko Popma <remko.po...@gmail.com> wrote: > One very simple way I use to clarify which parameter is what is to declare > a local variable for each param. > For example: > > (and this is not strictly a @Plugin factory method, but you get my > point...) > > public class RingBufferLogEventTest { > @Test > public void testGetLevelReturnsOffIfNullLevelSet() { > RingBufferLogEvent evt = new RingBufferLogEvent(); > String loggerName = null; > Marker marker = null; > String fqcn = null; > Level level = null; > Message data = null; > Throwable t = null; > Map<String, String> map = null; > ContextStack contextStack = null; > String threadName = null; > StackTraceElement location = null; > long currentTimeMillis = 0; > evt.setValues(null, loggerName, marker, fqcn, level, data, t, map, > contextStack, threadName, location, currentTimeMillis); > assertEquals(Level.OFF, evt.getLevel()); > } > > To me this is just as clear as > > builder.setLoggerName(null) > .withMarker(null) > .withLoggerFQCN(null) > .withLevel(null) > .withMessage(null) > .withThrowable(null) > .withContextMap(null) > .withContextStack(null) > .withThreadName(null) > .withLocation(null) > .withCurrentTime(0) > .build() > > > On Mon, Jun 16, 2014 at 1:10 PM, Matt Sicker <boa...@gmail.com> wrote: > >> Well, I can live with factory methods if we have a better method for >> doing unit tests. Not all unit tests need an XML configuration file. >> >> >> On 15 June 2014 22:04, Ralph Goers <ralph.go...@dslextreme.com> wrote: >> >>> Matt, >>> >>> The only objection I have to builders is that there should only be one >>> way to configure plugins and I have neither the time or energy to convert >>> all plugins from factories to builders. With 130+ open issues I think our >>> time is better focused there instead of fixing something that already works. >>> >>> And, FWIW, the only place you will see createAppender coded like that is >>> in unit tests and there are a bunch of ways to make that clearer. >>> >>> Ralph >>> >>> On Jun 15, 2014, at 7:19 PM, Matt Sicker <boa...@gmail.com> wrote: >>> >>> I'm really against using factory methods due to language limitations in >>> Java. You can't specify default values, for one. Two, the more parameters a >>> factory takes, the crazier the method is. Seriously, tell me what this >>> method is specifying: >>> >>> FileAppender.createAppender("true", "true", "true", "true", "true", >>> "true", "true", "4096", null, null, "false", null, null); >>> >>> >>> On 15 June 2014 21:05, Remko Popma <remko.po...@gmail.com> wrote: >>> >>>> I'm fine with just the factory methods too. >>>> >>>> Sent from my iPhone >>>> >>>> On 2014/06/16, at 9:44, Scott Deboy <scott.de...@gmail.com> wrote: >>>> >>>> +1 >>>> On Jun 15, 2014 4:05 PM, "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 >>>>>>>>> <http://www.manning.com/bauer3/> >>>>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> >>>>>>>>> Spring Batch in Action <http://www.manning.com/templier/> >>>>>>>>> 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 >>>>>>>> <http://www.manning.com/bauer3/> >>>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> >>>>>>>> Spring Batch in Action <http://www.manning.com/templier/> >>>>>>>> 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 >>>>>>> <http://www.manning.com/bauer3/> >>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> >>>>>>> Spring Batch in Action <http://www.manning.com/templier/> >>>>>>> Blog: http://garygregory.wordpress.com >>>>>>> Home: http://garygregory.com/ >>>>>>> Tweet! http://twitter.com/GaryGregory >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Matt Sicker <boa...@gmail.com> >>>>>> >>>>> >>>>> >>>>> >>>>> >>> >>> >>> -- >>> Matt Sicker <boa...@gmail.com> >>> >>> >>> >> >> >> -- >> Matt Sicker <boa...@gmail.com> >> > >