> On Dec 28, 2022, at 10:37 AM, Ralph Goers <ralph.go...@dslextreme.com> wrote:
> 
> 
> 
> Ralph
> 
>> On Dec 28, 2022, at 7:01 AM, Piotr P. Karwasz <piotr.karw...@gmail.com> 
>> wrote:
>> 
>> Hi Matt,
>> 
>> On Sun, 18 Dec 2022 at 20:30, Matt Sicker <m...@musigma.org> wrote:
>>> During this bootstrapping, if the configuration location is available (such 
>>> as for a unit test), should LoggerContext set up the configuration 
>>> provided? Or is there some sort of cyclic dependency here preventing us 
>>> from loading ConfigurationFactory right away? So far, the only cyclic 
>>> dependencies I’ve found are related to plugins created in the 
>>> DefaultConfiguration (or the NullConfiguration in some cases), but those 
>>> are already commented as such (like in PatternLayout).
>> 
>> I think we should rely more on our `LifeCycle` abstraction:
>> `Configuration` starts in the "initializing" state and does not have
>> any subcomponents (especially those that require a `LoggerContext` to
>> be present) until `initialize()` is called.
> 
> Actually, a LoggerContext is hard-wired with a DefaultConfiguration. So as 
> soon as it exists it has a Configuration. Once the Configuration identified 
> from the configLocation is created the DefaultConfiguration is replaced.  
> This is the discussion Matt was having in his previous email and didn’t 
> understand why it is required to work that way. Note that once the 
> LoggerContext is constructed it will be “wired” by the ContextSelector and 
> will be usable by any thread.
> 
>> 
>> We can do the same thing with `LoggerContext`: after the constructor
>> exits it does not have a configuration and is in the "initializing"
>> state.
> 
> After the Constructor exists is has a DefaultConfiguration.
> 
>> The configuration will be created on an `initialize()` call
>> (maybe chained from `start()`). By then we can safely pass a reference
>> to `LoggerContext` to the `AbstractConfiguration` constructor.
>> 
>> Logging does not occur until `start()` is called.
> 
> I don’t believe this is true. Once the ContextSelector registers it any calls 
> to log will use it.
> 
> Ralph

Note that LoggerContext.start() uses tryLock. If initialization is in progress 
then start() will simply return. So other threads will log while initialization 
is occurring. This is intentional.

Ralph

Reply via email to