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]
