标签:
最近想把自己零零散散写的代码嵌成一个应用,要考虑到各方面的debug,把logging看了一下,把用到的记下来。
import logging logging.debug(u‘调试‘) logging.info(u‘运行‘) logging.warning(u‘警告‘) #运行显示: #WARNING:root:警告
#默认情况下,logging打印WARNING级别以上的,并打印到屏幕。
#日志级别大小关系 CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET(默认),并且可以自定义。
#-*- coding:utf-8 -*- import logging logging.basicConfig(level=logging.DEBUG, format=u‘%(asctime)s 文件:%(filename)s [第 %(lineno)d 行] 等级: %(levelname)s 信息: %(message)s‘, datefmt=‘ %Y %b %d %H:%M:%S,%a‘, filename=‘guapeng.log‘, filemode=‘w‘) logging.debug(u‘调试‘) logging.info(u‘信息‘) logging.warning(u‘警告‘) #guapeng.log文件显示如下 #2015 Jul 27 16:22:26,Mon 文件:testlog.py [第 10 行] 等级: DEBUG 信息: 调试 #2015 Jul 27 16:22:26,Mon 文件:testlog.py [第 11 行] 等级: INFO 信息: 信息 #2015 Jul 27 16:22:26,Mon 文件:testlog.py [第 12 行] 等级: WARNING 信息: 警告 #basicConfig参数说明: #filename: 指定日志文件名 #filemode: 打开模式,‘w‘或‘a‘ #format: 指定输出的格式和内容,一些format默认的参数: # %(levelno)s: 日志级别数值 # %(levelname)s: 日志级别名称 # %(pathname)s: 当前执行程序的路径,相当于sys.argv[0] # %(filename)s: 当前执行程序名(注意这里与log文件名是不同的) # %(funcName)s: 当前执行函数 # %(lineno)d: 当前行号 # %(asctime)s: 当前时间 # %(thread)d: 线程ID # %(threadName)s: 线程名称 # %(process)d: 进程ID # %(message)s: 日志信息 #datefmt: 指定时间格式,与time.strftime()一样 #level: 设置打印日志级别,默认为logging.WARNING,上例为DEBUG,故大于DEBUG的都输出到log文件。 #stream: 指定日志的输出方式,默认输出到sys.stderr(屏幕),当stream和filename同时指定时,stream被忽略
#-*- coding:utf-8 -*- import logging logging.basicConfig(level=logging.DEBUG, format=u‘%(asctime)s 文件:%(filename)s [第 %(lineno)d 行] 等级: %(levelname)s 信息: %(message)s‘, datefmt=‘ %Y %b %d %H:%M:%S,%a‘, filename=‘guapeng.log‘, filemode=‘w‘) #定义一个StreamHandler,将INFO级别的信息打印到屏幕 console = logging.StreamHandler() console.setLevel(logging.INFO) formatter = logging.Formatter(‘%(name)-12s: %(levelname)-8s %(message)s‘) console.setFormatter(formatter) log = logging.getLogger(‘‘).addHandler(console) logging.debug(u‘调试‘) logging.info(u‘信息‘) logging.warning(u‘警告‘) #guapeng.log文件显示如下 #2015 Jul 27 16:22:26,Mon 文件:testlog.py [第 10 行] 等级: DEBUG 信息: 调试 #2015 Jul 27 16:22:26,Mon 文件:testlog.py [第 11 行] 等级: INFO 信息: 信息 #2015 Jul 27 16:22:26,Mon 文件:testlog.py [第 12 行] 等级: WARNING 信息: 警告 #屏幕显示如下 #root : INFO 信息 #root : WARNING 警告
python代码
#-*- coding:utf-8 -*- import logging import logging.config #导入配置文件 logging.config.fileConfig("logging.conf") #创建logger loggerInfo = logging.getLogger("TimeInfoLogger") #测试代码 loggerInfo.debug("debug message") loggerInfo.info("info message") loggerInfo.warn("warn message") loggerInfo.error("error message") loggerInfo.critical("critical message")
logging.conf文件代码
# 定义logger模块,root是父类,必需存在的,其它类自行定义。 [loggers] keys=root,TimeInfoLogger # 定义handler [handlers] keys=TimeInfoHandler #定义输出格式 [formatters] keys=TimeInfoFmt #-------------------------------------------------- # 实现上面定义的logger模块,必需是[logger_xxxx]这样的形式 #-------------------------------------------------- # [logger_xxxx] logger_模块名称 # level 级别,级别有DEBUG、INFO、WARNING、ERROR、CRITICAL # handlers 处理类,可以有多个,用逗号分开 # qualname logger名称,应用程序通过 logging.getLogger获取。对于不能获取的名称,则记录到root模块。 # propagate 是否继承父类的log信息,0:否 1:是 [logger_root] level=INFO handlers=TimeInfoHandler [logger_TimeInfoLogger] level=INFO handlers=TimeInfoHandler propagate=0 qualname=TimeInfoLogger #-------------------------------------------------- # handler #-------------------------------------------------- # [handler_xxxx] # class handler类名 # level 日志级别 # formatter,上面定义的formatter # args handler初始化函数参数 [handler_TimeInfoHandler] class=logging.handlers.TimedRotatingFileHandler level=INFO formatter=TimeInfoFmt args=(‘C:\\Users\\tyanf\\Desktop\\error.log‘, ‘midnight‘, 1, 6) #-------------------------------------------------- # 日志格式 #-------------------------------------------------- # %(asctime)s 年-月-日 时-分-秒,毫秒 2013-04-26 20:10:43,745 # %(filename)s 文件名,不含目录 # %(pathname)s 目录名,完整路径 # %(funcName)s 函数名 # %(levelname)s 级别名 # %(lineno)d 行号 # %(module)s 模块名 # %(message)s 消息体 # %(name)s 日志模块名 # %(process)d 进程id # %(processName)s 进程名 # %(thread)d 线程id # %(threadName)s 线程名 [formatter_TimeInfoFmt] format=%(asctime)s %(levelname)s %(message)s datefmt= class=logging.Formatter
#测试时间从7月20日到7月27号,最后文件库显示如下: #error.log.2015-07-21 #error.log.2015-07-22 #error.log.2015-07-23 #error.log.2015-07-24 #error.log.2015-07-25 #error.log.2015-07-26 #error.log #其中error.log.2015-07-20由于程序设定backupcount为6,当大于6时把最早的删除,再添加新的日志文件,故已经被删除。
参考资料:
http://my.oschina.net/leejun2005/blog/126713
https://docs.python.org/2/library/logging.handlers.html
标签:
原文地址:http://www.cnblogs.com/guapeng/p/4680684.html