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

Reply via email to