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]

Reply via email to