Ondrej Sury wrote:


Nope, (void *)cls->log_writer is pointer to log file descriptor.

this can be anything. (it's a void). In some modules I have written, it's a wrapper around a socket. See, open_config_log

cls->log_writer = log_writer_init(p, s, cls->fname);

log_writer_init retures whatever you function returns. In mod_log_config, it's an apr_file_t *.

Currently, however, log_writer_init is global. It should be per cls, or per server.



Also, init is called for each CustomLog config entry.


Yep, but only ap_log_writer_init is called.  You need to do something
like that:

foreach provider in ap_log_writer_providers {
        cls->log_writer = provider->init(...., &cls->log_data);

        if (cls->log_writer) {
                break;
        }
}

Then later when writing log you need to call

cls->log_writer(..., cls->log_data, ...)

instead of just

log_writer(...)

yes. basically.

I figure you could change cls to:

typedef struct {
    const char *fname;
    const char *format_string;
    apr_array_header_t *format;
    void *log_writer;
    void *log_init; /*added*/
    char *condition_var;
} config_log_state;


and log_init and log_writer would be set at config time. log_init would get ran in open_logs.


--
Brian Akins
Lead Systems Engineer
CNN Internet Technologies

Reply via email to