Как использовать собственную регистрацию Python или / и Twisted logger для нескольких сценариев демона / cron? - PullRequest
2 голосов
/ 21 сентября 2011

Я использую ведение журнала в один файл с различными сценариями одной программы - такими как задачи cron, витые демоны (HttpServers с некоторыми данными) и т. Д.

Если я использую ведение журнала Python по умолчанию в базовом классе, например

        import logging
        import logging.handlers
        ....

        self.__fname = open(logname, 'a')
        logging.basicConfig(format=FORMAT, filename=logname, handler=logging.handlers.RotatingFileHandler)
        self._log = logging.getLogger(self.__pname)
        self._log.setLevel(loglevel)

        logging.warn('%s %s \033[0m' % (self.__colors[colortype], msg))

тогда все работает нормально, отправляя вывод всех скриптов в одном файле, но отсутствует некоторая важная часть витого журнала по умолчанию - например, информация о http запросе / заголовках и т. Д.

иначе я использую скрученную регистрацию, такую ​​как

        from twisted.python.logfile import DailyLogFile
        from twisted.python import log
        from twisted.application.service import Application

        ....

        application = Application("foo")
        log.startLogging(DailyLogFile.fromFullPath(logname))

        print '%s %s \033[0m' % (self.__colors[colortype], msg)

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

Конечно, задачи cron работают без витого реактора, но с использованием витой регистрации.

Что я должен делать с ведением журнала для регистрации всех данных, напечатанных в Twisted / cron-частях приложения?

Спасибо за любую помощь!

1 Ответ

2 голосов
/ 21 сентября 2011

Я думаю, дело в том, что вы не должны использовать DailyLogFile, а использовать PythonLOggingObserver для перенаправления журнала в стандартный журнал lib

from twisted.python import log
observer = log.PythonLoggingObserver()
observer.start()
log.msg('%s %s \033[0m' % (self.__colors[colortype], msg))

Также вы можете увидеть пример в документации: http://twistedmatrix.com/documents/current/core/howto/logging.html#auto3

...