вход в mod_python / apache - PullRequest
       11

вход в mod_python / apache

1 голос
/ 05 мая 2009

Каков стандартный способ заставить модуль журналирования python работать с apache / modpython?

Я хочу вызвать mylog.warn («что угодно») и в результате вызвать req.log_error (), где req - это запрос modpython.

Есть ли простой способ настроить это?

Ответы [ 2 ]

2 голосов
/ 05 мая 2009

Я никогда не делал этого, но кажется, что написание подкласса logging.Handler не должно быть таким сложным. Нечто подобное должно сработать. Я не могу сказать, что я на самом деле пробовал это, так как в настоящее время у меня не установлен mod_python, но вы должны быть в состоянии где-нибудь вызвать logging.root.addHandler(ApacheLogHandler()) и заставить его работать YMMV.

import logging
import apache

class ApacheLogHandler(logging.Handler):
    LEVEL_MAP = {
        logging.DEBUG: apache.APLOG_DEBUG,
        logging.INFO: apache.APLOG_INFO,
        logging.WARNING: apache.APLOG_WARNING,
        logging.ERROR: apache.APLOG_ERR,
        logging.CRITICAL: apache.APLOG_CRIT,
        }
    def __init__(self, request=None):
        self.log_error = apache.log_error
        if request is not None:
            self.log_error = request.log_error
    def emit(self,record):
        apacheLevel = apache.APLOG_DEBUG
        if record.levelno in ApacheLogHandler.LEVEL_MAP:
            apacheLevel = ApacheLogHandler.LEVEL_MAP[record.levelno]
        self.log_error(record.getMessage(), apacheLevel)
0 голосов
/ 05 мая 2009

Мы используем следующее. Это полностью задокументировано здесь .

  1. Мы используем logging.fileConfig с файлом logging.ini.

  2. Каждый модуль использует logger= logging.getLogger(__name__)

  3. Затем мы можем выполнить logger.error («бла-бла-бла») во всем нашем приложении.

Работает отлично. Файл logging.ini определяет, куда помещается файл журнала, чтобы мы могли сохранить его вместе с другими файлами журнала для нашего веб-приложения.

...