https://www.polarxiong.com/archives/Flask%E4%BD%BF%E7%94%A8%E6%97%A5%E5%BF%97%E8%AE%B0%E5%BD%95%E5%88%B0%E6%96%87%E4%BB%B6%E7%A4%BA%E4%BE%8B.html
flask的日志记录需要用到python标准库logging的支持。
最简单示例:
Python
from flask import Flask
import logging
app = Flask(__name__)
@app.route('/')
def root():
app.logger.info('info log')
app.logger.warning('warning log')
return 'hello'
if __name__ == '__main__':
app.debug = True
handler = logging.FileHandler('flask.log')
app.logger.addHandler(handler)
app.run()
记录到flask.log
中内容为:
info log
warning log
Python
handler = logging.FileHandler('flask.log')
即创建一个log handler,比较常用的有FileHandler
和RotatingHandler
,其中FileHandler
函数原型为
Python
class logging.FileHandler(filename,mode='a',encoding=None,delay=False)
Python
app.logger.addHandler(handler)
即将此handler
加入到此app中
Python
app.logger.info('info log')
即以INFO
级别将'info log'
写入到日志中。
logging
的级别主要有NOTSET
、DEBUG
、INFO
、WARNING
、ERROR
和CRITICAL
,挺容易理解的。
高级一些的示例:
Python
from flask import Flask
import logging
app = Flask(__name__)
@app.route('/')
def root():
app.logger.info('info log')
app.logger.warning('warning log')
return 'hello'
if __name__ == '__main__':
app.debug = True
handler = logging.FileHandler('flask.log', encoding='UTF-8')
handler.setLevel(logging.DEBUG)
logging_format = logging.Formatter(
'%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s')
handler.setFormatter(logging_format)
app.logger.addHandler(handler)
app.run()
记录到flask.log
中内容为:
2015-08-29 10:12:48,004 - INFO - test.py - root - 9 - info log
2015-08-29 10:12:48,004 - WARNING - test.py - root - 10 - warning log
Python
handler.setLevel(logging.DEBUG)
即设置日志记录最低级别为DEBUG
,低于DEBUG
级别的日志记录会被忽略,不设置setLevel()
则默认为NOTSET
级别。
Python
logging_format = logging.Formatter(
'%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s')
handler.setFormatter(logging_format)
这两句用来控制日志记录格式,效果如上述记录内容;在Python参考文档中有更详细的说明,这里简单介绍一下:
-
%(asctime)s
即日志记录时间,精确到毫秒 -
%(levelname)s
即此条日志级别 -
%(filename)s
即触发日志记录的python文件名 -
%(funcName)s
即触发日志记录的函数名 -
%(lineno)s
即触发日志记录代码的行号 -
%(message)s
这项即调用如app.logger.info('info log')中的参数,即message
注意:此示例来自Python 3.4.3 和Flask 0.10.1