Advanced Logging configuration for flask application based on yaml or json file. See logging.config
NOTE: If you want to use flask_logify.handlers.FlaskSysLogHandler
you must init this extension with an app context.
The dump of request or response are made by builders, there are two concrete implementations:
LogTextBuilder
: message as plain text (configurable).LogJSONBuilder
: message as json format.
You can create your own builder by extending class LogBuilder
. In order to get the correct remote address
you can override LogBuilder.get_remote_address
method or you can inject a function in LogBuilder
constructor.
See example usage in example/test.py.
FlaskLogging
as a decorator attribute with which you can disable log messages for a specific route,
passing a logging filter to it. For example you want disable log for health check endpoint.
See example/text.py.
Install flask_logify
using pip
:
$ pip install Flask-Logify
An example of log file configuration is under example folder.
Only yaml or json format are supported.
from flask import Flask
from flask_logify import FlaskLogging
app = Flask(__name__)
app.config['LOG_FILE_CONF'] = 'log.yaml'
app.config['LOG_LOGGER_NAME'] = 'flask-development'
logging = FlaskLogging()
with app.app_context():
logging.init_app(app)
app.run()
Go to http://127.0.0.1:5000/ and see log messages like configured
Base configuration keys:
LOGGING
: (default: None) dict logging configurationLOG_FILE_CONF
: (default: None) absolute path of configuration file (has priority on LOGGING)LOG_APP_NAME
: (default: flask) the ident of the record used by syslogLOG_LOGGER_NAME
: (default: flask-development) usually is {LOG_APP_NAME}-{FLASK_ENV}REQUEST_ID_HEADER
: (default: X-Request-ID) request id header keyLOG_BUILDER
: (default: text) log builder implementation (text, json)
Text and JSON builder configuration keys:
LOG_REQ_HEADERS
: (default: []) request headers to dump alwaysLOG_RESP_HEADERS
: (default: []) response headers to dump alwaysLOG_REQ_SKIP_DUMP
: (default: not DEBUG) if true dump of request body and headers are skippedLOG_RESP_SKIP_DUMP
: (default: DEBUG) if true dump of response body and headers are skipped
Text builder only:
LOG_RESP_FORMAT
: (default: "OUTGOING RESPONSE for {address} at {path}: {level} STATUS {status}{headers}{body}") log message format for responseLOG_REQ_FORMAT
: (default: "INCOMING REQUEST: {address} {method} {scheme} {path}{headers}{body}") log message format for request
License MIT