I am unable to log messages to a file in Flask using the below code:
from flask import Flask,request,jsonify
import requests
import logging
from logging.config import dictConfig
app = Flask(__name__)
app.config['SECRET_KEY'] = "Secret!"
dictConfig(
{
'version': 1,
'formatters': {
'default': {
'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s',
},
'simpleformatter' : {
'format' : '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
}
},
'handlers':
{
'wsgi': {
'class': 'logging.StreamHandler',
'formatter': 'default'
},
'custom_handler': {
'class' : 'logging.FileHandler',
'formatter': 'simpleformatter',
'filename' : 'WARN.log'
}
},
'root': {
'level': 'INFO',
'handlers': ['wsgi']
},
'MyExample': {
'level': 'WARN',
'handlers' : 'custom_handler'
}
})
class InvalidUsage(Exception):
status_code = 400
def __init__(self, message, status_code=None, payload=None):
Exception.__init__(self)
self.message = message
if status_code is not None:
self.status_code = status_code
self.payload = payload
def to_dict(self):
rv = dict(self.payload or ())
rv['message'] = self.message
rv['status_code'] = self.status_code
return rv
@app.errorhandler(InvalidUsage)
def handle_invalid_usage(error):
response = jsonify(error.to_dict())
response.status_code = error.status_code
return response
@app.route('/test',methods=["GET","POST"])
def test():
url = "https://httpbin.org/status/404"
try:
response = requests.get(url)
if response.status_code != 200:
try:
response.raise_for_status()
except requests.exceptions.HTTPError:
status = response.status_code
print status
raise InvalidUsage("An HTTP exception has been raised",status_code=status)
except requests.exceptions.RequestException as e:
app.logger.info("An exception has been raised")
app.logger.info(e)
raise InvalidUsage("request exception has been raised")
if __name__ == "__main__":
app.run(debug=True)
app.logger.getLogger('MyExample')
The last line : app.logger.getLogger('MyExample') gives an error saying that app.logger.getLogger('MyExample').
Since i have configured two different types of logger in my application root and MyExample how do i make sure that Flask should use MyExample logger to log messages.
Thanks in advance for any answers.
dictConfig(
{
'version': 1,
'formatters': {
'default': {
'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s',
},
'simpleformatter' : {
'format' : '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
}
},
'handlers':
{
'wsgi': {
'class': 'logging.StreamHandler',
'formatter': 'default'
},
'custom_handler': {
'class' : 'logging.FileHandler',
'formatter': 'simpleformatter',
'filename' : 'WARN.log',
'level' : 'WARN'
}
},
'root': {
'level': 'INFO',
'handlers': ['wsgi', 'custom_handler']
}})
Use your custom handler in root. Add level inside handlers. Now it will do both, store in log file & display on the console.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.