модули apache ap_log_perror находится на другом уровне, чем ap_log_error - PullRequest
0 голосов
/ 09 октября 2018

У меня есть модуль apache, который регистрирует некоторые строки.Если я регистрируюсь с ap_log_error и установил LogLevel для отладки, я вижу сообщение.Однако, если я пытаюсь использовать ap_log_perror, я вижу журналы уровня ошибок, но журналы отладки не отображаются.Кажется, что они находятся на разном уровне, но я не могу понять, как установить уровень пула (или получить его в этом отношении).

Я вижу, что есть вызов ap_get_server_module_loglevel, но яЯ не уверен, что правильный индекс.Пытаясь 0, я вижу уровень, который я установил в верхнем уровне apache.conf (в данном случае trace1).Нет виртуальных хостов с настроенными уровнями журнала.Кажется, что каждый пул, к которому у меня есть доступ, ведет себя одинаково.

static int foo_setup_handler(apr_pool_t *pconf, 
                             apr_pool_t *plog,
                             apr_pool_t *ptemp, 
                             server_rec *s) {
    int mod_log = ap_get_server_module_loglevel(s, 0);
    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, 
                 "Post Config  server mod 0 loglevel %d", 
                  mod_log);
    ap_log_perror(APLOG_MARK, APLOG_ERR, APR_SUCCESS, pconf,
                  " P E++++++++++++++++");
    ap_log_perror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, pconf, 
                  "P D conf ++++++++++++++++");
    ap_log_perror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, plog, 
                  "P D log ++++++++++++++++");
    ap_log_perror(APLOG_MARK, APLOG_WARNING, APR_SUCCESS, plog, 
                  "P W log ++++++++++++++++");
    ap_log_perror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, ptemp, 
                  "P D temp++++++++++++++++");

, и вот вывод в журнале ошибок.(Я удалил дату и идентификатор потока из строки ниже)

... [:debug] [pid 2..:tid 1...] mod_foo.c(123): Post Config  server mod 0 loglevel 8
... [:error] [pid 2..:tid 1...]  P E++++++++++++++++
... [:warn] [pid 2..:tid 1...] P W log ++++++++++++++++

есть идеи, почему сообщения журнала perror не отображаются на настроенном уровне, а отображаются на уровне WARNING или ERROR?

1 Ответ

0 голосов
/ 26 октября 2018

Это ошибка?в апаче.См. отчет об ошибке .

По существу, ap_log_perror вызывает log_error_core с const server_rec *s, установленным в NULL, и это противоречит логике здесь :

if (s == NULL) {
    /*
     * If we are doing stderr logging (startup), don't log messages that are
     * above the default server log level unless it is a startup/shutdown
     * notice
     */
#ifndef DEBUG
    if ((level_and_mask != APLOG_NOTICE)
        && (level_and_mask > ap_default_loglevel)) {
        return;
    }
#endif

Так ap_log_perror будетОтображать только уведомления или сообщения выше уровня по умолчанию (обычно это предупреждение)

...