python logging模块学习

感谢原文:http://blog.csdn.net/chosen0ne/article/details/7319306      and      http://outofmemory.cn/code-snippet/450/python-rizhi-logging-module-usage-summary

默认log将日志打印到屏幕,log的默认等级是warning,高于warning的信息打印,低于warning的信息不打印。

用logger.setLevel(logging.DEBUG)设置log等级。

打印日志等级的不肯定的想法:

logger和handler都可以设置日志等级,handler最先接受日志信息,将高于handler等级的留下,低于的丢掉;传给logger后,logger再做一遍比较,进行保留和丢掉,最终写进日志文件的信息是按照最高的那个日志等级来的。


logger:提供日志接口,供代码使用。多次使用相同name来调用getLogger返回同一个logger对象。

handler:定义日志文件名,文件最大字节数,最多日志文件数目。一个logger可以有多个handler。

filter:决定是否将一个日志记录发送到handler。

formatter:指定日志记录的输出格式。

只有消息级别大于logger和handler级别才会往日志文件中记录。

logger的几种handle方式:

logging.StreamHandler:日志输出到流,可以是sys.stderr或者sys.stdout


log 的配置可采用代码中配置,或者在配置文件中配置。

(1):在代码中配置log:

用这种方法,在py文件一次次启动过程中handler的设定依旧有效。

import logging
import logging.handlers
LOG_FILE = 'tst.log'
#asctime是到毫秒的
fmt = '%(asctime)s - %(filename)s:%(lineno)s - %(name)s - %(message)s'
#创名为tst的logger对象
logger = logging.getLogger('tst') 
logger.setLevel(logging.DEBUG) #设置log等级
#创建handler,指定log文件,文件最大容量,文件备份个数
handler = logging.handlers.RotatingFileHandler(LOG_FILE,maxBytes = 10*1024*1024,backupCount = 5)
#实例化一个foramtter
formatter = logging.Formatter(fmt)
handler.setFormatter(formatter) #把formatter添加到handler
logger.addHandler(handler) #把handler添加到logger

logger.info('first info message')
logger.debug('first debug message')
######   输出   ######
#2014-10-22 10:02:14,667 - 111.py:19 - tst - first info message
#2014-10-22 10:02:14,673 - 111.py:20 - tst - first debug message
######          ######

######   总结   ######

创建formatter,添加到已创建的handler;添加handler到已创建的logger

(2)也可以这样来:

import logging

logging.basicConfig(level=logging.DEBUG,\

foramt='%(asctime)s %(filename)s:[line:%(lineno)d] %(levelname)s %(message)s'\

datefmt='%a,%d %b %Y %H:%M:%S',\

filename='my.log',\

filemode='w')#分为‘a’和‘w’两种模式。添加,写。

logging.debug('debug info')

logging.warning('warning info')

logging.info('info info')

######   总结   ######

logging.basicConfig函数各参数:
filename: 指定日志文件名
filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a'
format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:
%(levelno)s: 打印日志级别的数值
%(levelname)s: 打印日志级别名称
%(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s: 打印当前执行程序名
%(funcName)s: 打印日志的当前函数
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(thread)d: 打印线程ID
%(threadName)s: 打印线程名称
%(process)d: 打印进程ID
%(message)s: 打印日志信息
datefmt: 指定时间格式,同time.strftime()
level: 设置日志级别,默认为logging.WARNING
stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略

######              ######

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值