Ничего не записывается в файл, когда я переопределяю `log_message ()` в `SimpleHTTPRequestHandler` - PullRequest
1 голос
/ 02 февраля 2012

У меня есть следующий код для веб-сервера. У меня проблема в том, что ничего не напечатано в httpd.log - и я не знаю, почему. Файл создается, и если я добавляю оператор print() в log_message(), он распечатывается, но в файл ничего не записывается.

from http.server import HTTPServer
from http.server import SimpleHTTPRequestHandler
import logging
from logging.handlers import RotatingFileHandler

class MyHandler(SimpleHTTPRequestHandler):
    def __init__(self, *args):
        self.logger = logging.getLogger("httpd")
        formatter = logging.Formatter(
        '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        fh = RotatingFileHandler("httpd.log", mode='wa',
                maxBytes=1 << 20, backupCount=2)
        fh.setFormatter(formatter)
        fh.setLevel(logging.INFO)
        self.logger.addHandler(fh)
        self.logger.info("Creating HTTP Request Handler")
        super(SimpleHTTPRequestHandler, self).__init__(*args)

    def log_message(self, format, *args):
        self.logger.info("%s - - [%s] %s\n" %
                         (self.address_string(),
                          self.log_date_time_string(),
                          format%args))

def main():
  server = HTTPServer(('', 80), MyHandler)
  server.serve_forever()

if __name__ == '__main__':
  main()

Это на Python 3.1.3

Ответы [ 3 ]

4 голосов
/ 02 февраля 2012

Регистратор может иметь более одного обработчика. Разные обработчики могут иметь разные уровни журнала. Регистратор имеет свой собственный уровень журнала, который не затрагивается обработчиками, и передает сообщения с соответствующими уровнями журнала обработчикам, чтобы они могли работать с ними, как они считают нужным.

Поэтому, пока ваш обработчик интересовался сообщениями уровня INFO, ваш регистратор их игнорировал.

Уровень журнала по умолчанию WARNING наследуется от корневого регистратора.

1 голос
/ 02 февраля 2012

Мне нужно было позвонить self.logger.setLevel(logging.INFO) в дополнение к звонку fh.setLevel()

Если кто-то объяснит почему , я приму этот ответ :)

0 голосов
/ 13 ноября 2015
 open(LOGFILE, "w+").write("%s - - [%s] %s\n" % (self.address_string(), self.log_date_time_string(), format%args)) 

Это то, что вас может заинтересовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...