Here is the same message with two paragraphs taken out that are numbered and that you would have seen had you scrolled down:

You need to determine what level of involvement is required for anyone doing programmatic customization:

1. Free to use the API from the outside.
2. Need to subclass a factory to do it from within (as if you are part of the core yourself now) 3. Need to subclass a factory and even create a new /type/ of configuration (as if you are really deeply mired into the core now).

You have two choices to make:

1. Do you want programmatic configuration to be an equivalent or near-equivalent to config-file based control? 2. Do you want it to be an interface-only element (outside access to configuration methods) a core element that requires factory substantiation or a core element that requires factory substantiation and configuration descendent substantiation?.

The second choice refers to the first three points.

So the summary of the cut-out summary is:

a. Do you even want real programmatic configuration
b. If you do, do you want it to be as an interface-only thing, as a core-thing that requires Factory subclassing, or as a core-thing that requires Factory and Configuration subclassing.

And the summary of that is:

/You must make a principle decisions about these areas if you wish to continue in any clear way and know what you have to do beyond this point.

/At least that is my belief. Bye, and see ya.



Op 17-8-2015 om 12:09 schreef Ralph Goers:
Just letting you know I did NOT read your email beyond the first 2 paragraphs. It is just way too long. Please summarize if you have something important to say.

Ralph

On Aug 16, 2015, at 1:29 AM, Xen <x...@dds.nl <mailto:x...@dds.nl>> wrote:

Op 15-8-2015 om 17:36 schreef Gary Gregory:

I think we are also in limbo so to speak as to what to do WRT providing a programmatic interface for configuration. We have factory methods, a few builder classes, but probably not a clear road map. We all need to think about the big picture before we continue sprinkling builder classes all over the place.

Should such an API be part of the Core or a new log4j-config module where all configuration code would sit? We probably still do not want it as part of the public API? Should the config API aim to configure the Core or any supported logging back-end? Surely we would only start with the Core and worry about the rest later. Or should we? I'm asking a lot of questions I know.

How do we even discuss this via emails? That's a lot of writing! Is there are better way to discuss this instead?

Gary

Actually first thing I think additional builder classes can't hurt really because they don't really change the API in any way except by creating a convenience that Core-modifiers can use and there is very little chance at this point of them needing to be removed again.

Also removing them can't be hard unless they have been in there for a while and code has been built against it. What of course the "public API" sees to avoid.

But which it of course doesn't do, maybe for the majority of corporate users, but certainly not for people like me. (I read a wildly megalomanous advert for a software developer today that basically required perfect programming skills from knowing every important language to being "fluid in cross-browser issues" to being wonderfully communicative to taking pride in writing /standards-compliant code/.). Well if standards-complicance is not using the Core API directly, then maybe everything you've said and done is true ;-).

Seriously.

Anyway. The questions.

From what I /see/ happening is that there is going to be some effort in having a nicer interface that does not really need to use individual builders. On the other hand I don't know why other code shouldn't use it but if you derive fields/inputs/values from a config file, then maybe calling individual builder methods is not useful and a create method is better suited. I generally think at this point that you should leave that like that.

So programmatic control, me being a layman, depends on two things:

- would it really be something that the core developers want? In that case the error message from not having a config file should leave/depart. If config files stop being fully completely totally solely centric, then the initialization code (this is just ConfigurationFactory.java) should not give an error, however it could still be a warning an info or even a debug, as they don't make it through to the StatusLogger in the default config. So the obvious first thing to do is to supply a patch to change that ERROR level to WARN.

- at that point you are really 'bug' free to do either XML/JSON/whatever config, or programmatic config. The second thing that is important then is whether you want to keep focussing solely on ConfigurationFactories or whether you want an application to be able to for instance create some personal Logging.init() method or whatever to initialize the system programmatically. The difference is at that point: do we SubClass a ConfigurationFactory (and craft a configuration in it using programmatic control) or do we SubClass a ConfigurationFactory as well as an AbstractConfiguration that will then use programmatic control (or even other means) inside its constructor/initializer, or do we agree or find outselves in agreement with just using a DefaultConfiguration as it is returned and adjusting that?.

Those are three different levels of involvement.

1. Free to use the API from the outside.
2. Need to subclass a factory to do it from within (as if you are part of the core yourself now) 3. Need to subclass a factory and even create a new /type/ of configuration (as if you are really deeply mired into the core now).

Currently my program that I haven't worked on for days now ;-)...

Has just created its own package ( .log ) with a class (Logging) that does everything I need to do configuration wise. At that point, for instance, I am at the choice of whether to stay outside as much as I can, or to let myself be absorbed into Core by subclassing a factory. Currently my .log package does have a factory but it is to avoid the ERROR level message for not having a configuration file.

Customizing something really requires staying outside as you deal with the system, because otherwise you ar really writing a form of plugin and you are /extending/ the system just as a way of configuring it.

I don't know about the Configurator I must say, it didn't or doesn't seem to do (mostly didn't) the things I wanted from it / from the system.

Now of course the endeavour by that can't remember his name to create a ConfigurationBuilder would fit probably the mark of extending the system in order that another won't have to do it anymore.

But you have to make these two choices, I can't do it for you:

1. Do you want programmatic configuration to be an equivalent or near-equivalent to config-file based control? 2. Do you want it to be an interface-only element (outside access to configuration methods) a core element that requires factory substantiation or a core element that requires factory substantiation and configuration descendent substantiation?.

I think the rest of your choices will follow automatically once you've made these choices and become clear on them. I cannot really say anything about it because my preferences are already known and I like to deal with an interface only, and this was the original goal of the public / separatist API. I am currently actually /doing/ the first of these three things, and so I answer these two questions with a "yes" and a "the first".

But the rest is up to you, you have to decide, I can't work with you if you don't because it will be up in the air and you will do something random.

Regards...

B.

Reply via email to