def create_handlers_from_settings(settings): """ used internally to setup logging for the settings.logs """ # clear any previously setup handlers clear_settings_handlers() if not settings.logs.enabled: return # have to set the root logger lower than WARN (the default) or our # application logs will never be seen logging.root.setLevel(APPLICATION) if settings.logs.errors.enabled: format_str = "%(asctime)s - %(levelname)s - %(name)s - %(message)s" formatter = logging.Formatter(format_str) error_handler = RotatingFileHandler( path.join(settings.dirs.logs, 'errors.log'), maxBytes=settings.logs.max_bytes, backupCount=settings.logs.backup_count, ) error_handler._from_blazeweb_settings = True error_handler.setLevel(logging.WARN) error_handler.setFormatter(formatter) logging.root.addHandler(error_handler) if settings.logs.application.enabled: class OnlyLevel25(logging.Filter): def filter(self, record): return record.levelno == 25 format_str = "%(asctime)s - %(name)s - %(message)s" formatter = logging.Formatter(format_str) app_handler = RotatingFileHandler( path.join(settings.dirs.logs, 'application.log'), maxBytes=settings.logs.max_bytes, backupCount=settings.logs.backup_count, ) app_handler._from_blazeweb_settings = True app_handler.setLevel(APPLICATION) app_handler.setFormatter(formatter) app_handler.addFilter(OnlyLevel25()) logging.root.addHandler(app_handler) if settings.logs.email.enabled: format_str = "%(asctime)s - %(message)s" formatter = logging.Formatter(format_str) app_handler = RotatingFileHandler( path.join(settings.dirs.logs, 'email.log'), maxBytes=settings.logs.max_bytes, backupCount=settings.logs.backup_count, ) app_handler._from_blazeweb_settings = True app_handler.setLevel(logging.INFO) app_handler.setFormatter(formatter) logging.getLogger('blazeweb.mail').addHandler(app_handler) logging.getLogger('blazeweb.mail').setLevel(logging.INFO)