Same here. I am also alarmed that you do not have a mouse. That's is one handy tool!
On Sun, Aug 9, 2015 at 11:44 AM, Ralph Goers <[email protected]> wrote: > While interesting reading I can't quite figure out if there is a question > you wanted answered in there? > > Ralph > > > On Aug 9, 2015, at 6:05 AM, Xen <[email protected]> wrote: > > > > I have a JIRA account now. > > > > At least, I hope I will have one for long, I am thinking of cancelling > my main account (email) for a short while to start over with a clean slate. > Including its domain ;-). Might get a lot of bounces for a LOT of email > services ;-). > > > > But in any case... I was writing an email I guess. Let me just put it > down below: > > > > > > > > ===================== > > I was writing this message but it didn't send: (My webmail logs me out > incessantly). > > > > However, I found part of the answer. > > > > I was wondering why the DefaultConfiguration doesn't have a factory, but > now I know. > > > > The main methods of the ConfigurationFactory reference a default Factory > subclass within itself that loads every other factory it can find based on > filetype extension. When none is found, an error message is departed and > the DefaultConfiguration is returned. > > > > I had been wondering how to get rid of that error message lol. I had > wanted to just take a DefaultConfiguration and just change it (configure > it) but maybe I should subclass ConfigurationFactory, throw away every type > of source argument it passes me, and then just return the > (Default)Configuration that I want :P. > > > > Not sure how "plugins" work yet but I believe you can enable it easily > via e.g. the LogManager. I think I will write a PDF about this :P. But I > have no diagram-making skills yet. No mouse :(. Maybe have a mouse in a > week. > > > > I had written this question: > > > > private static ConfigurationFactory configFactory = new Factory(); > > > > ^^ how come this works? There is no Factory class from what I can see. > > > > --- > > But I saw it was down below. > > > > > > I also wrote and write and will write this: ?. > > > > ===---===- > > About Double Checked Locking. I don't really understand. If someone is > willing to answer. > > > > Thread 1 begins and allocates an object. > > It saves the reference and that code is synchronized on the class/lock. > > Thread 2 comes in and apparentlty correctly identifies that the instance > variable (reference) has been written to and proceeds to (outside of any > synchronized block) return the instance reference at which point mayhem > ensues. > > > > Now we are volatile. Thread 1 begins and allocates an object. > > It saves the reference and that code is synchronized on the class/lock. > > Thead 2 comes in .... > > > > Oh, I get it. In the first case the write-address-to-instance-variable > can be a non-atomic operation. If the address is written before the > constructor/initialization code is completed then the other thread might > get in between and do bad stuff. With volatile the entire > (method)/constructor call and its subsequent assignment (or prior > assignment, but completion of the statement) are atomic (??). > > > > Or rather, perhaps it is ensured that the final assignment is the very > /last/ operation? > > > > After all, you might expect that the construction of an object works as > follows. > > 1. allocate memory > > 2. write to reference variable > > 3. call constructor on reference variable. > > > > In between 2 and 3 a different thread can merge and incorrectly assume > that the object is fully accessible. If 2 and 3 are swapped so that the > final reference is only written after the constructor/method is done no > problem can I occur. I don't get it really. > > > > Reference: http://www.javamex.com/tutorials/double_checked_locking.shtml > > ===--=-==-== > > > > > > Anyway that was my email. A bit ... interspersed now I guess. > > > > Bye. > > > > > > > > Quoting Ralph Goers <[email protected]>: > > > >> Note: in case you didn't know, everyone who submits patches that are > applied gets "credit" for it. See the change log for any release. Without > a Jira ticket we can't do that. > >> > >> Ralph > >> > >>> On Aug 9, 2015, at 2:28 AM, Gary Gregory <[email protected]> > wrote: > >>> > >>> Patch applied. TY. In the future, please create a JIRA for patches. > >>> > >>> Keep them coming :-) > >>> > >>> Cheers, > >>> Gary > >>> > >>>> On Sun, Aug 9, 2015 at 1:11 AM, Xen <[email protected]> wrote: > >>>> > >>>> I've seen the commit. I will check it out. > >>>> > >>>> Offtopic: fixed a typo in the javadoc: > >>>> > >>>> > >>>> diff --git > >>>> > a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java > >>>> > b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java > >>>> index 3c8c44a..14ea97b 100644 > >>>> --- > >>>> > a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java > >>>> +++ > >>>> > b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java > >>>> @@ -66,7 +66,7 @@ import org.apache.logging.log4j.util.Strings; > >>>> * </ol> > >>>> * > >>>> * If the ConfigurationFactory that was added returns null on a call to > >>>> - * getConfiguration the any other ConfigurationFactories found as > plugins > >>>> will > >>>> + * getConfiguration then any other ConfigurationFactories found as > >>>> plugins will > >>>> * be called in their respective order. DefaultConfiguration is always > >>>> called > >>>> * last if no configuration has been returned. > >>>> */ > >>>> > >>>> > >>>> "I will check it out." Now isn't that ambiguous :P. > >>>> > >>>> Regards.. > >>>> > >>>> > >>>> > >>>> > >>>> Quoting Gary Gregory <[email protected]>: > >>>> > >>>> Pushed to Git master. > >>>>> > >>>>> Xen: Please see the setLevel methods in Configurator. > >>>>> > >>>>> Gary > >>>>> > >>>>> On Sat, Aug 8, 2015 at 4:24 PM, Gary Gregory <[email protected] > > > >>>>> wrote: > >>>>> > >>>>> Please see the patch in > https://issues.apache.org/jira/browse/LOG4J2-1090 > >>>>>> > >>>>>> Gary > >>>>>> > >>>>>> On Sat, Aug 8, 2015 at 4:05 PM, Ralph Goers < > [email protected]> > >>>>>> wrote: > >>>>>> > >>>>>> Yes. > >>>>>>> > >>>>>>> Ralph > >>>>>>> > >>>>>>>>> On Aug 8, 2015, at 4:03 PM, Gary Gregory <[email protected] > > > >>>>>>>> wrote: > >>>>>>>> > >>>>>>>> That's my bad, I misread Configurator for Configuration. > >>>>>>>> > >>>>>>>> That said, the > >>>>>>>> method > >>>>>>> > >>>>>>> > org.apache.logging.log4j.core.config.AbstractConfiguration.getRootLogger() > >>>>>>>> is not in the Configuration interface. Is it OK to add it? > >>>>>>>> > >>>>>>>> Gary > >>>>>>>> > >>>>>>>> On Sat, Aug 8, 2015 at 3:42 PM, Ralph Goers < > >>>>>>> [email protected] > >>>>>>>> > >>>>>>>> wrote: > >>>>>>>> > >>>>>>>>> I just noticed you added this to AbstractConfiguration. Wouldn’t > it > >>>>>>> be > >>>>>>>>> easier for users to do it as a method on Configurator? > >>>>>>>>> > >>>>>>>>> Ralph > >>>>>>>>> > >>>>>>>>>>> On Aug 8, 2015, at 12:55 PM, Gary Gregory < > [email protected]> > >>>>>>>>>> wrote: > >>>>>>>>>> > >>>>>>>>>> setLevel, setRootLevel; code review please, note the added > check " > >>>>>>> if > >>>>>>>>>> (!loggerConfig.getLevel().equals(level)) ..." > >>>>>>>>>> > >>>>>>>>>> diff --git > >>>>>>> > >>>>>>> > a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java > >>>>>>> > >>>>>>> > b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java > >>>>>>>>>> index ada5900..7ee09ca 100644 > >>>>>>>>>> --- > >>>>>>> > >>>>>>> > a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java > >>>>>>>>>> +++ > >>>>>>> > >>>>>>> > b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java > >>>>>>>>>> @@ -39,6 +39,7 @@ > >>>>>>>>>> import org.apache.logging.log4j.core.Filter; > >>>>>>>>>> import org.apache.logging.log4j.core.Layout; > >>>>>>>>>> import org.apache.logging.log4j.core.LogEvent; > >>>>>>>>>> +import org.apache.logging.log4j.core.LoggerContext; > >>>>>>>>>> import org.apache.logging.log4j.core.appender.AsyncAppender; > >>>>>>>>>> import org.apache.logging.log4j.core.appender.ConsoleAppender; > >>>>>>>>>> import org.apache.logging.log4j.core.async.AsyncLoggerConfig; > >>>>>>>>>> @@ -829,4 +830,23 @@ > >>>>>>>>>> return buffer.toByteArray(); > >>>>>>>>>> } > >>>>>>>>>> > >>>>>>>>>> + @Override > >>>>>>>>>> + public void setLevel(final String loggerName, final Level > >>>>>>> level) > >>>>>>> { > >>>>>>>>>> + setLevel(getLoggerConfig(loggerName), level); > >>>>>>>>>> + } > >>>>>>>>>> + > >>>>>>>>>> + @Override > >>>>>>>>>> + public void setRootLevel(final Level level) { > >>>>>>>>>> + setLevel(getRootLogger(), level); > >>>>>>>>>> + } > >>>>>>>>>> + > >>>>>>>>>> + private void setLevel(final LoggerConfig loggerConfig, > final > >>>>>>> Level > >>>>>>>>>> level) { > >>>>>>>>>> + if (!loggerConfig.getLevel().equals(level)) { > >>>>>>>>>> + loggerConfig.setLevel(level); > >>>>>>>>>> + final LoggerContext loggerContext = (LoggerContext) > >>>>>>>>>> LogManager.getContext(false); > >>>>>>>>>> + loggerContext.updateLoggers(); > >>>>>>>>>> + } > >>>>>>>>>> + } > >>>>>>>>>> + > >>>>>>>>>> + > >>>>>>>>>> } > >>>>>>>>>> diff --git > >>>>>>> > >>>>>>> > a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/Configuration.java > >>>>>>> > >>>>>>> > b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/Configuration.java > >>>>>>>>>> index c592b05..29fb7b2 100644 > >>>>>>>>>> --- > >>>>>>> > >>>>>>> > a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/Configuration.java > >>>>>>>>>> +++ > >>>>>>> > >>>>>>> > b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/Configuration.java > >>>>>>>>>> @@ -137,4 +137,18 @@ > >>>>>>>>>> * @return the custom levels defined in the current > configuration > >>>>>>>>>> */ > >>>>>>>>>> List<CustomLevelConfig> getCustomLevels(); > >>>>>>>>>> + > >>>>>>>>>> + /** > >>>>>>>>>> + * Sets the level of the given logger name. > >>>>>>>>>> + * > >>>>>>>>>> + * @param loggerName the logger name > >>>>>>>>>> + * @param level the new level > >>>>>>>>>> + */ > >>>>>>>>>> + void setLevel(String loggerName, Level level); > >>>>>>>>>> + > >>>>>>>>>> + /** > >>>>>>>>>> + * Sets the level of the root logger. > >>>>>>>>>> + * @param level the new level > >>>>>>>>>> + */ > >>>>>>>>>> + void setRootLevel(Level level); > >>>>>>>>>> } > >>>>>>>>>> > >>>>>>>>>> Gary > >>>>>>>>>> > >>>>>>>>>> On Sat, Aug 8, 2015 at 11:14 AM, Ralph Goers < > >>>>>>> [email protected] > >>>>>>>>>> > >>>>>>>>>> wrote: > >>>>>>>>>> > >>>>>>>>>>> Yup. > >>>>>>>>>>> > >>>>>>>>>>> And while your at it you might want to add setRootLevel(Level > >>>>>>> level); > >>>>>>>>>>> > >>>>>>>>>>> Ralph > >>>>>>>>>>> > >>>>>>>>>>>> On Aug 8, 2015, at 10:19 AM, Gary Gregory < > [email protected] > >>>>>>>> > >>>>>>>>>>> wrote: > >>>>>>>>>>>> > >>>>>>>>>>>> Like this: > >>>>>>>>>>>> > >>>>>>>>>>>> diff --git > >>>>>>> > >>>>>>> > a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java > >>>>>>> > >>>>>>> > b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java > >>>>>>>>>>>> index ada5900..bf01c3e 100644 > >>>>>>>>>>>> --- > >>>>>>> > >>>>>>> > a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java > >>>>>>>>>>>> +++ > >>>>>>> > >>>>>>> > b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java > >>>>>>>>>>>> @@ -39,6 +39,7 @@ > >>>>>>>>>>>> import org.apache.logging.log4j.core.Filter; > >>>>>>>>>>>> import org.apache.logging.log4j.core.Layout; > >>>>>>>>>>>> import org.apache.logging.log4j.core.LogEvent; > >>>>>>>>>>>> +import org.apache.logging.log4j.core.LoggerContext; > >>>>>>>>>>>> import org.apache.logging.log4j.core.appender.AsyncAppender; > >>>>>>>>>>>> import org.apache.logging.log4j.core.appender.ConsoleAppender; > >>>>>>>>>>>> import org.apache.logging.log4j.core.async.AsyncLoggerConfig; > >>>>>>>>>>>> @@ -788,6 +789,13 @@ > >>>>>>>>>>>> return list; > >>>>>>>>>>>> } > >>>>>>>>>>>> > >>>>>>>>>>>> + public void setLevel(String loggerName, Level level) { > >>>>>>>>>>>> + LoggerConfig loggerConfig = > getLoggerConfig(loggerName); > >>>>>>>>>>>> + loggerConfig.setLevel(level); > >>>>>>>>>>>> + final LoggerContext loggerContext = (LoggerContext) > >>>>>>>>>>>> LogManager.getContext(false); > >>>>>>>>>>>> + loggerContext.updateLoggers(); > >>>>>>>>>>>> + } > >>>>>>>>>>>> + > >>>>>>>>>>>> private void setParents() { > >>>>>>>>>>>> for (final Map.Entry<String, LoggerConfig> entry : > >>>>>>>>>>>> loggers.entrySet()) { > >>>>>>>>>>>> final LoggerConfig logger = entry.getValue(); > >>>>>>>>>>>> > >>>>>>>>>>>> ? > >>>>>>>>>>>> > >>>>>>>>>>>> On Fri, Aug 7, 2015 at 5:43 AM, Ralph Goers < > >>>>>>>>> [email protected]> > >>>>>>>>>>>> wrote: > >>>>>>>>>>>> > >>>>>>>>>>>>> I'd recommend the Configurator class. > >>>>>>>>>>>>> > >>>>>>>>>>>>> Ralph > >>>>>>>>>>>>> > >>>>>>>>>>>>>> On Aug 6, 2015, at 9:46 PM, Gary Gregory < > >>>>>>> [email protected]> > >>>>>>>>>>> wrote: > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> For the simple case where you want to update one level, I > think > >>>>>>> we > >>>>>>>>>>> should > >>>>>>>>>>>>>> have a one method call for folks. Where would be the best > place > >>>>>>> to > >>>>>>>>> hang > >>>>>>>>>>>>>> that? > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Gary > >>>>>>> > --------------------------------------------------------------------- > >>>>>>>>>>>>> To unsubscribe, e-mail: > >>>>>>> [email protected] > >>>>>>>>>>>>> For additional commands, e-mail: > >>>>>>> [email protected] > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>> -- > >>>>>>>>>>>> E-Mail: [email protected] | [email protected] > >>>>>>>>>>>> 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 > >>>>>>> > --------------------------------------------------------------------- > >>>>>>>>>>> To unsubscribe, e-mail: > [email protected] > >>>>>>>>>>> For additional commands, e-mail: > >>>>>>> [email protected] > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> -- > >>>>>>>>>> E-Mail: [email protected] | [email protected] > >>>>>>>>>> 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 > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > --------------------------------------------------------------------- > >>>>>>>>> To unsubscribe, e-mail: > [email protected] > >>>>>>>>> For additional commands, e-mail: > [email protected] > >>>>>>>> > >>>>>>>> > >>>>>>>> -- > >>>>>>>> E-Mail: [email protected] | [email protected] > >>>>>>>> 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 > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > --------------------------------------------------------------------- > >>>>>>> To unsubscribe, e-mail: [email protected] > >>>>>>> For additional commands, e-mail: > [email protected] > >>>>>> > >>>>>> -- > >>>>>> E-Mail: [email protected] | [email protected] > >>>>>> 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: [email protected] | [email protected] > >>>>> 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 > >>>> > >>>> > >>>> > >>>> --------------------------------------------------------------------- > >>>> To unsubscribe, e-mail: [email protected] > >>>> For additional commands, e-mail: [email protected] > >>> > >>> > >>> -- > >>> E-Mail: [email protected] | [email protected] > >>> 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 > >> > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: [email protected] > >> For additional commands, e-mail: [email protected] > >> > >> > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [email protected] > > For additional commands, e-mail: [email protected] > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > > -- E-Mail: [email protected] | [email protected] 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
