On Wednesday 02 June 2010, Stefan Fritsch wrote:
> I have updated my patch to the latest trunk and to use the variant
> where the module for logging is selected with APLOG_USE_MODULE and
> AP_DECLARE_MODULE macros:
>
> APLOG_USE_MODULE(foo)
>
> expands to
>
> extern module AP_MODULE_DECLARE_DATA foo_module;
> static int * const aplog_module_index =
> &(foo_module.module_index)
>
> and
>
> AP_DECLARE_MODULE(foo)
>
> expands to
>
> APLOG_USE_MODULE(foo);
> module AP_MODULE_DECLARE_DATA foo_module
>
> So, a single-file module only needs to do:
>
> AP_DECLARE_MODULE(foo) =
> {
> STANDARD20_MODULE_STUFF,
> ...
>
> Multi-file modules have to use APLOG_USE_MODULE in the other
> files.
>
> The patch is at
>
> http://people.apache.org/~sf/per-module-loglevel-v4/ ,
I have added two additional patches (filenames 10*) to fix a segfault.
In addition, I now have this in http_log.h:
#define APLOG_NO_MODULE -1
static int * const aplog_module_index;
#define APLOG_MODULE_INDEX \
(aplog_module_index ? *aplog_module_index : APLOG_NO_MODULE)
This means, if some source file does not initialize aplog_module_index
with APLOG_USE_MODULE, logging will simply default to the global
loglevel. This works because static pointers are initialized to NULL
if no explicit initialization is given.
I think that's a nice solution. Modules from 2.2.x continue to work
without changes. But in order to benefit from per-module loglevel
configuration, they have to use the new macros.
Cheers,
Stefan