Finalize the extra-keyword logging feature
This commit is contained in:
		| @@ -1,8 +1,14 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| """ | ||||
| Extra functionality for Flask logging | ||||
|  | ||||
| Flask-Logging-Extras is a Flask extension that plugs into the logging | ||||
| mechanism of Flask applications. | ||||
|  | ||||
| Flask-Logging-Extras requires you to set FLASK_LOGGING_EXTRAS_KEYWORDS to a | ||||
| dictionary value, where the dictionary key is a the key you can use in the | ||||
| log message format, and the value is a default value that is substituted if | ||||
| no value is present in the message record. | ||||
| """ | ||||
|  | ||||
| import logging | ||||
| @@ -29,7 +35,7 @@ class FlaskExtraLogger(logging.getLoggerClass()): | ||||
|        register_logger_class(cls=FlaskExtraLogger) | ||||
|  | ||||
|        app = Flask(__name__) | ||||
|        app.config['FLASK_LOGGING_EXTRAS_KEYWORDS'] = ['category'] | ||||
|        app.config['FLASK_LOGGING_EXTRAS_KEYWORDS'] = {'category': '<unset>'} | ||||
|        app.logger.init_app() | ||||
|  | ||||
|        formatter = logging.Formatter( | ||||
| @@ -47,11 +53,18 @@ class FlaskExtraLogger(logging.getLoggerClass()): | ||||
|     """ | ||||
|  | ||||
|     def __init__(self, *args, **kwargs): | ||||
|         if 'app' in kwargs and kwargs['app'] is not None: | ||||
|             raise TypeError( | ||||
|                 "Cannot initialise {classname} with an app.  " | ||||
|                 "See the documentation of Flask-Logging-Extras for more info." | ||||
|                 .format(classname=self.__class__.__name__)) | ||||
|         if 'app' in kwargs: | ||||
|             if kwargs['app'] is not None: | ||||
|                 raise TypeError( | ||||
|                     "Cannot initialise {classname} with an app.  See the" | ||||
|                     "documentation of Flask-Logging-Extras for more info." | ||||
|                     .format(classname=self.__class__.__name__)) | ||||
|             else: | ||||
|                 # If app is None, treat it as if it wasn’t there | ||||
|                 del(kwargs['app']) | ||||
|  | ||||
|         self.app = None | ||||
|         self._valid_keywords = [] | ||||
|  | ||||
|         super(FlaskExtraLogger, self).__init__(*args, **kwargs) | ||||
|  | ||||
| @@ -62,6 +75,9 @@ class FlaskExtraLogger(logging.getLoggerClass()): | ||||
|         for kw in self._valid_keywords: | ||||
|             if kw in kwargs: | ||||
|                 kwargs['extra'][kw] = kwargs[kw] | ||||
|                 del(kwargs[kw]) | ||||
|             else: | ||||
|                 kwargs['extra'][kw] = self._valid_keywords[kw] | ||||
|  | ||||
|         super(FlaskExtraLogger, self)._log(*args, **kwargs) | ||||
|  | ||||
| @@ -82,7 +98,7 @@ class FlaskExtraLogger(logging.getLoggerClass()): | ||||
|                              reserved for internal use | ||||
|         """ | ||||
|  | ||||
|         app.config.setdefault('FLASK_LOGGING_EXTRAS_KEYWORDS', []) | ||||
|         app.config.setdefault('FLASK_LOGGING_EXTRAS_KEYWORDS', {}) | ||||
|  | ||||
|         for kw in app.config['FLASK_LOGGING_EXTRAS_KEYWORDS']: | ||||
|             if kw in ['exc_info', 'extra', 'stack_info']: | ||||
| @@ -90,6 +106,8 @@ class FlaskExtraLogger(logging.getLoggerClass()): | ||||
|                     '"{keyword}" member of FLASK_LOGGING_EXTRAS_KEYWORDS is ' | ||||
|                     'reserved for internal use.') | ||||
|  | ||||
|         self._valid_keywords = app.config['FLASK_LOGGING_EXTRAS_KEYWORDS'] | ||||
|  | ||||
|  | ||||
| def register_logger_class(cls=FlaskExtraLogger): | ||||
|     """ | ||||
| @@ -118,7 +136,7 @@ def register_logger_class(cls=FlaskExtraLogger): | ||||
|         raise TypeError( | ||||
|             "The logger class must be a subclass of logging.Logger!") | ||||
|  | ||||
|     old_class = logging.get_logger_class() | ||||
|     old_class = logging.getLoggerClass() | ||||
|     logging.setLoggerClass(cls) | ||||
|  | ||||
|     return old_class | ||||
|   | ||||
		Reference in New Issue
	
	Block a user