No, of course, everyone seems to agree that custom levels should be permitted. 
But I never heard agreement on whether we were going the extensible enum route 
or the Level-as-interface route. The camp still seemed to disagree on that.

Nick

Sent from my iPhone, so please forgive brief replies and frequent typos

> On Jan 25, 2014, at 11:20, Ralph Goers <ralph.go...@dslextreme.com> wrote:
> 
> I have not heard anyone disagree with allowing custom Levels.  The 
> disagreement I am hearing is over adding new pre-defined levels.
> 
> Ralph
> 
>> On Jan 25, 2014, at 7:29 AM, Nick Williams <nicho...@nicholaswilliams.net> 
>> wrote:
>> 
>> I may have missed something. Did we decide on an approach? Last I heard, the 
>> camp was still split: Some wanted to go with my extensible enum, others 
>> wanted to change Level to an interface and make a Levels enum.
>> 
>> So I'm a bit confused. Which implementation are you working on?
>> 
>> Nick
>> 
>>> On Jan 25, 2014, at 7:08 AM, Ralph Goers wrote:
>>> 
>>> I am working on the implementation of custom levels now.  I should have it 
>>> done today.
>>> 
>>> Ralph
>>> 
>>>> On Jan 24, 2014, at 7:07 PM, Remko Popma <remko.po...@gmail.com> wrote:
>>>> 
>>>> What is the best way to make progress on the custom levels implementation?
>>>> 
>>>> Do we re-open LOG4J-41 or start a fresh Jira ticket? For implementation 
>>>> ideas, do we attach files to Jira, or create a branch?
>>>> 
>>>> Remko
>>>> 
>>>>> On Saturday, January 25, 2014, Gary Gregory <garydgreg...@gmail.com> 
>>>>> wrote:
>>>>>> On Fri, Jan 24, 2014 at 11:48 AM, Remko Popma <remko.po...@gmail.com> 
>>>>>> wrote:
>>>>>> Gary,
>>>>>> 
>>>>>> The hard-coded levels were proposed because it seemed that the 
>>>>>> extensible enum idea raised by Nick was not going to be accepted.
>>>>>> My original position was that Markers could fulfill the requirement but 
>>>>>> Nick and yourself made it clear that this was not satisfactory.
>>>>>> 
>>>>>> With extensible enums and markers off the table it seemed that the 
>>>>>> hard-coded levels was the only alternative, and discussion ensued about 
>>>>>> what these levels should be called and what strength they should have.
>>>>>> 
>>>>>> During this discussion, several people, including me, repeatedly 
>>>>>> expressed strong reservations about adding pre-defined levels, but by 
>>>>>> this time I think people were thinking there was no alternative.
>>>>>> 
>>>>>> It looked like we were getting stuck, with half the group moving in one 
>>>>>> direction ("add pre-defined levels!") and the other half wanting to move 
>>>>>> in another direction ("don't add pre-defined levels!"). I asked that we 
>>>>>> re-reviewed our assumptions and try to reach a solution that would 
>>>>>> satisfy all users. 
>>>>>> 
>>>>>> We then decided to explore the option of using extensible enums again. 
>>>>>> This is still ongoing, but I haven't seen anyone arguing against this 
>>>>>> idea since we started this thread.
>>>>>> 
>>>>>> Hard-coded levels and the extensible enum are different solutions to the 
>>>>>> same problem.
>>>>> 
>>>>> Hello All:
>>>>> 
>>>>> Absolutely not. See my DEFCON example. 
>>>>> Talking about an "extensible enum" is mixing design and implementation, 
>>>>> we are talking about 'custom' and/or 'extensible' levels.
>>>>> Custom/Extensible levels can be designed to serve one or all of:
>>>>> 
>>>>> - Allow inserting custom levels between built-in levels.
>>>>> - Allow for domain specific levels outside of the concept of built-in 
>>>>> levels, the DEFCON example.
>>>>> - Should the custom levels themselves be extensible?
>>>>> 
>>>>> Gary
>>>>>  
>>>>> The extensible enum solution satisfies all of us who are opposed to 
>>>>> adding pre-defined levels, while also satisfying the original requirement 
>>>>> raised by Nick and yourself. Frankly I don't understand why you would 
>>>>> still want the pre-defined levels.
>>>>> 
>>>>> Remko
>>>>> 
>>>>> 
>>>>> 
>>>>> On Sat, Jan 25, 2014 at 12:53 AM, Gary Gregory <garydgreg...@gmail.com> 
>>>>> wrote:
>>>>> On Thu, Jan 23, 2014 at 10:45 PM, Remko Popma <remko.po...@gmail.com> 
>>>>> wrote:
>>>>> Gary, 
>>>>> 
>>>>> I think that's a very cool idea!
>>>>> Much more flexible, powerful and elegant than pre-defined levels could 
>>>>> ever be. 
>>>>> 
>>>>> As I wrote: "I am discussing custom levels here with the understanding 
>>>>> that this is a separate topic from what the built-in levels are."
>>>>> 
>>>>> I'm not sure why you want to make the features mutually exclusive. (Some) 
>>>>> others agree that these are different features.
>>>>> 
>>>>> I see two topics:
>>>>> 
>>>>> - What are the default levels for a 21st century logging framework. Do we 
>>>>> simply blindly copy Log4j 1? Or do we look at frameworks from different 
>>>>> languages and platforms for inspiration?
>>>>> - How (not if, I think we all agree) should we allow for custom levels.
>>>>> 
>>>>> Gary
>>>>> 
>>>>> It definitely makes sense to design the extensible enum with this 
>>>>> potential usage in mind. 
>>>>> 
>>>>> Remko
>>>>> 
>>>>> 
>>>>> On Friday, January 24, 2014, Gary Gregory <garydgreg...@gmail.com> wrote:
>>>>> I am discussing custom levels here with the understanding that this is a 
>>>>> separate topic from what the built-in levels are. Here is how I convinced 
>>>>> myself that custom levels are a “good thing”.
>>>>> 
>>>>> No matter which built-in levels exits, I may want custom levels. For 
>>>>> example, I want my app to use the following levels DEFCON1, DEFCON2, 
>>>>> DEFCON3, DEFCON4, and DEFCON5. This might be for one part of my app or a 
>>>>> whole subsystem, no matter, I want to use the built-in levels in addition 
>>>>> to the DEFCON levels. It is worth mentioning that if I want that feature 
>>>>> only as a user, I can “skin” levels in a layout and assign any label to 
>>>>> the built-in levels. If I am also a developer, I want to use DEFCON 
>>>>> levels in the source code.
>>>>> 
>>>>> 
>>>>> 
>>>>> At first, my code might look like:
>>>>> 
>>>>> 
>>>>> 
>>>>> logger.log(DefconLevels.DEFCON5, “All is quiet”);
>>>>> 
>>>>> 
>>>>> 
>>>>> Let’s put aside for now the type of DefconLevels.DEFCON* objects. I am a 
>>>>> user, and I care about my call sites.
>>>>> 
>>>>> 
>>>>> 
>>>>> What I really want of course is to write:
>>>>> 
>>>>> 
>>>>> 
>>>>> defconLogger.defcon5(“All is quiet”)
>>>>> 
>>>>> 
>>>>> 
>>>>> Therefore, I argue that for any “serious” use of a custom level, I will 
>>>>> wrap a Logger in a custom logger class providing call-site friendly 
>>>>> methods like defcon5(String).
>>>>> 
>>>>> 
>>>>> 
>>>>> So now, as a developer, all I care about is DefConLogger. It might wrap 
>>>>> (or subclass) the Log4J Logger, who knows. The implementation of 
>>>>> DefConLogger is not important to the developer (all I care is that the 
>>>>> class has ‘defconN’ method) but it is important to the configuration 
>>>>> author. This tells me that as a developer I do not care how DefConLogger 
>>>>> is implemented, with custom levels, markers, or elves. However, as 
>>>>> configuration author, I also want to use DEFCON level just like the 
>>>>> built-in levels.
>>>>> 
>>>>> 
>>>>> 
>>>>> The configuration code co
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> -- 
>>>>> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org 
>>>>> Java Persistence with Hibernate, Second Edition
>>>>> JUnit in Action, Second Edition
>>>>> Spring Batch in Action
>>>>> Blog: http://garygregory.wordpress.com 
>>>>> Home: http://garygregory.com/
>>>>> Tweet! http://twitter.com/GaryGregory
> 

Reply via email to