How about having a DefaultLayout for use *only* by DefaultConfiguration? The formatters used by this layout can be hard-coded: level, timestamp, message. Thoughts?
Sent from my iPhone > On 2014/05/26, at 8:38, Matt Sicker <[email protected]> wrote: > > So DefaultConfiguration creates a PatternLayout, but PatternLayout takes a > Configuration. I thought it would help prevent NPEs using a > DefaultConfiguration as the default, but then upon trying that, I found > myself in an infinite recursion of constructors! > > In order to provide a default, we have a few options: > > 1. Use NullConfiguration by default. Problem is, this basically means "ignore > all logging calls". > > 2. Lazily create the DefaultConfiguration if configuration is null at build() > time. > > 3. Leak "this" from the DefaultConfiguration constructor into the > PatternLayout used for the default ConsoleAppender which is used as the > default appender on the root logger. It's not pure, but sometimes you do need > to leak an object before it's been fully constructed. > > 4. Add another attribute to disable setting a Configuration. I don't like > this option as it introduces extra complexity and doesn't solve the problem > of having a null config (and not a NullConfiguration). > > Right now, I'm leaning toward 2 and 3 combined. > > -- > Matt Sicker <[email protected]>
