So I assume we could build on this by adding the ability to generate these custom levels from the config, with no user provided class required?
On Jan 26, 2014 12:58 AM, "Ralph Goers" <ralph.go...@dslextreme.com> wrote: > > I have completed the work on custom levels. It uses a variation of Nick’s “extensible enum” class. The major difference with what he proposed is that the custom enums must be declared in a class annotated with @Plugin(name=“xxxx” category=“Level”) for them to be usable during configuration. > > Are their any objections to me checking this in? I’ll be doing the commit at around noon Pacific Daylight Time if I don’t hear any. > > Ralph > > > > On Jan 25, 2014, at 7:08 AM, Ralph Goers <ralph.go...@dslextreme.com> 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 >> >> >