栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python: Logging模块实例详解

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python: Logging模块实例详解

Logging 模块
import logging
Quick Start

导入模块后直接logging.waring(),logging.error()简单粗暴地调用即可。默认的level是DEBUG,所以warning会打印出信息,info级别更低,不会输出信息。如果你不知道level等参数的意义请后面解释,淡定,继续往下看。

如果不特别配置,logging模块将日志打印到屏幕上(stdout)。

#!/usr/local/bin/python# -*- coding:utf-8 -*-import logging
logging.warning('Watch out!')  # print message to consolelogging.info('I told you so')  # will not print anything
Log写入文件

更常见的情形是把信息记录在log文件里。需要用logging.basicConfig()设置文件名以及level等参数,常见的level见下表。

LevelValueUsage
CRITICAL50严重错误,表明程序已不能继续运行了
ERROR40严重的问题,程序已不能执行一些功能了
WARNING30有意外,将来可能发生问题,但依然可用
INFO20证明事情按预期工作
DEBUG10详细信息,调试问题时会感兴趣。

如果设置level为INFO,那么DEBUG级别的信息就不会输出。常见的函数接口有debug(), info(), warning(), error() and critical(),分别对应log不同严重级别的信息。

注意把下面代码写入脚本(直接在terminal里不会生成文件),比如test_log.py。

import logging
logging.basicConfig(filename='example.log',level=logging.DEBUG,filemode='w')# filemode = 'w' 每次运行,重写loglogging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
cat example.log
DEBUG:root:This message should go to the log fileINFO:root:So should thisWARNING:root:And this, too
改变Log输出格式

通过format参数,可以定制写入log文件的格式。

import logging
logging.basicConfig(format='%(levelname)s:%(message)s',level=logging.DEBUG)
logging.debug('This message should appear on the console')
logging.info('So should this')
logging.warning('And this, too')

DEBUG:This message should appear on the console
INFO:So should this
WARNING:And this, too

记录时间

通过datafmt参数,可以格式化输出log的时间。

import logging
logging.basicConfig(format='%(asctime)s %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p')
logging.warning('is when this event was logged.')

07/16/2016 12:10:35 AM is when this event was logged.

更丰富的Log控制

上面的代码大部分是利用默认配置,其实我们自定义更多。比如把输出到terminal和log.txt文件里。

首先理解几个概念是有用的。

  • Logger 记录器,暴露了应用程序代码能直接使用的接口。

  • Handler 处理器,将(记录器产生的)日志记录发送至合适的目的地。

  • Filter 过滤器,提供了更好的粒度控制,它可以决定输出哪些日志记录。

  • Formatter 格式化器,指明了最终输出中日志记录的布局。

首先,创建一个logger,记录器,然后给其添加不同的handler,输出到不同的渠道,比如下面这个例子就会生成log.txt文件,并同时输出在terminal里。

import logging# create logger with name# if not specified, it will be rootlogger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)# create a handler, write to log.txt# logging.FileHandler(self, filename, mode='a', encoding=None, delay=0)# A handler class which writes formatted logging records to disk files.fh = logging.FileHandler('log.txt')
fh.setLevel(logging.DEBUG)# create another handler, for stdout in terminal# A handler class which writes logging records to a streamsh = logging.StreamHandler()
sh.setLevel(logging.DEBUG)# set formatterformatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
sh.setFormatter(formatter)# add handler to loggerlogger.addHandler(fh)
logger.addHandler(sh)# log itlogger.debug('Debug')
logger.info('Info')
2016-07-18 21:43:14,648 - my_logger - DEBUG - Debug2016-07-18 21:43:14,650 - my_logger - INFO - Info
Ref:
  • 官方文档

  • Python Module of the Week

  • Good logging practice in python



作者:米乐乐果
链接:https://www.jianshu.com/p/29cb6a535e2d


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/224682.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号