首页 > flask使用loggging模块记录一些特地日志的问题

flask使用loggging模块记录一些特地日志的问题

我的一个flask项目,项目里面到时会有操作svn和paramiko操作远程服务,到时要把这些操作的内容,以及返回的内容记录下来,我就想使用logging模块来记录这些日志信息。

在简单配置的时候

logging.basicConfig(level=logging.DEBUG,
                format='%(asctime)s %(levelname)s %(message)s',
                datefmt='%a, %d %b %Y %H:%M:%S',
                filename='logs/pro.log',
                filemode='w')

logging.debug('dddddddddd')

发现它会把所有的信息都记录进去,包括访问信息,而不是记录‘ddddddd’这个信息

logs/pro.log记录的内容:

Fri, 01 Apr 2016 15:56:26 DEBUG dddddddddd
Fri, 01 Apr 2016 15:56:26 WARNING  * Debugger is active!
Fri, 01 Apr 2016 15:56:26 INFO  * Debugger pin code: 191-207-894
Fri, 01 Apr 2016 15:56:26 INFO  * Running on http://127.0.0.1:5002/ (Press CTRL+C to quit)
Fri, 01 Apr 2016 15:58:02 INFO 127.0.0.1 - - [01/Apr/2016 15:58:02] "GET / HTTP/1.1" 200 -
Fri, 01 Apr 2016 15:58:05 INFO 127.0.0.1 - - [01/Apr/2016 15:58:05] "GET /prosql?product=prosql HTTP/1.1" 200 -
Fri, 01 Apr 2016 15:58:48 INFO 127.0.0.1 - - [01/Apr/2016 15:58:48] "GET / HTTP/1.1" 200 -
Fri, 01 Apr 2016 15:58:49 INFO 127.0.0.1 - - [01/Apr/2016 15:58:49] "GET /prosql?product=prosql HTTP/1.1" 200 -
Fri, 01 Apr 2016 15:59:00 INFO 127.0.0.1 - - [01/Apr/2016 15:59:00] "POST /prosql?product=prosql HTTP/1.1" 302 -
Fri, 01 Apr 2016 15:59:00 INFO 127.0.0.1 - - [01/Apr/2016 15:59:00] "GET /prosql HTTP/1.1" 200 -

这是因为咋的?


原因很简单,这些模块里也会用log这个模块,你可以在log格式里指定
%(filename)s和%(lineno)s
可以看到分别有对应的这些模块调用地方的语句和行数


概括点说,是因为 python logging 模块的机制,使得你的 log 和 flask 的 log 的信息,会被同一个 logger 实例处理。这里的实例是 root logger。

如果你仔细观察,会发现在 console 里,flask 的日志不见了,都跑到你的文件里了。这是因为你给 root logger 设置了一个 handler —— FileHandler —— baseConfig 会自己添加。

你可以创建一个自己的 logger,使用名字、handler、过滤规则等方式来让这个 logger 只处理你自己的事务。比如:

logger = logging.getLogger("mylog")
fmter = logging.Formatter('%(asctime)s %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S')
hdlr = logging.FileHandler("pro.log")
hdlr.setFormatter(fmt=fmter)
logger.addHandler(hdlr=hdlr)
logger.warning('dddddddddd')
【热门文章】
【热门文章】