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