python logging

最近想把自己零零散散写的代码嵌成一个应用,要考虑到各方面的debug,把logging看了一下,把用到的记下来。

  • 将日志打印到屏幕
复制代码
import logging

logging.debug(u'调试')
logging.info(u'运行')
logging.warning(u'警告')

#运行显示:
#WARNING:root:警告 
#默认情况下,logging打印WARNING级别以上的,并打印到屏幕。
#日志级别大小关系 CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET(默认),并且可以自定义。
复制代码
  • basicConfig函数配置日志输出
复制代码
#-*- 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被忽略
复制代码
  • 将debug信息打印打log文件,将info信息打印到屏幕
复制代码
#-*- 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 警告
复制代码
  •  用config文件,同时实现日志文件按天存储,而且只存一周内的日志。

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值