2017-08-19 1 views
0

Ich habe eine kleine Flask-Erweiterung geschrieben, die der Anleitung auf der offiziellen Website folgt. Leider gibt es keinen Abschnitt über das Anmelden an diesem Handbuch.Log-Nachrichten, die nicht von Flask in meiner benutzerdefinierten Flask-Erweiterung gedruckt wurden

Eine vereinfachte Version meiner __init__.py ist:

class MyFlaskExtension(object): 

    def __init__(self, app=None) 
     self.app 
     if app is not None: 
      self.init_app(app) 

     self.logger = logging.getLogger(__name__) 
     self.logger.setLevel(logging.DEBUG) 
     self.logger.debug('test') 

dies nicht funktioniert, ich bin keine Fehler bekommen, aber Flask ist meine Debug-Nachrichten nicht zu drucken. Wenn ich meine Logger-Deklaration durch self.logger = self.app.logger ersetze, funktioniert es, Flaschennormallogger verwendend. Allerdings möchte ich die Konfiguration und das Format dafür getrennt von Flask handhaben.

Wie kann ich Flask dazu bringen, die Protokolle meiner Erweiterung zu drucken?

Antwort

0

Wenn Sie Ihren benutzerdefinierten Logger verwenden möchten (mit einem bestimmten Format und Log-Level), sollten Sie Handler registrieren. Hier Beispiel, das Sie app.py helfen können:

import logging 
from flask import Flask, current_app 

app = Flask(__name__) 


class MyFlaskExtension(object): 

    def __init__(self): 
     self.logger = logging.getLogger('my_flask_ext_logger') 
     self.logger.setLevel(logging.DEBUG) 
     # your custom handlers, formatters and filters here... 
     handler = logging.StreamHandler() 
     handler.setFormatter(logging.Formatter(logging.BASIC_FORMAT)) 
     self.logger.addHandler(handler) 

     self.logger.info('My Was initialized') 

    def init_app(self, flask_app): 
     if not hasattr(flask_app, 'extensions'): 
      app.extensions = {} 

     app.extensions['MyFlaskExtension'] = self 

     app.config.setdefault('DEFAULT_PARAM_OF_YOUR_EXTENSION', None) 
     # other params 
     app.config.setdefault('ONE_MORE DEFAULT_PARAM...', 5) 


@app.route('/') 
def main(): 
    # check your logger 
    my_extension_logger = current_app.extensions['MyFlaskExtension'].logger 
    my_extension_logger.info('Route "/". This is message from My extension logger') 

    return 'logger' 

# init and register your extension 
my_extension = MyFlaskExtension() 
my_extension.init_app(app) 

if __name__ == '__main__': 
    app.run() 

unserer Anwendung. Sie werden die nächste Ausgabe in der Konsole sehen:

INFO:my_flask_ext_logger:My Was initialized 
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 

des http://127.0.0.1:5000/ Nun lassen Sie öffnen. Sie werden eine Nachricht von Ihrem Logger sehen:

INFO:my_flask_ext_logger:Route "/". This is message from My extension logger 
127.0.0.1 - - [22/Aug/2017 16:28:53] "GET/HTTP/1.1" 200 - 

Hoffe, das hilft.

Verwandte Themen