Python中级篇(十八)logging模块

函数式简单配置

import logging 

logging.debug('debug message') 

logging.info('info message') 

logging.warning('warning message') 

logging.error('error message') 

logging.critical('critical message')

默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG),默认的日志格式为日志级别:Logger名称:用户输出消息。

灵活配置日志级别,日志格式,输出位置:

import logging 

logging.basicConfig(level=logging.DEBUG, 

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

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

                    filename='/tmp/test.log', 

                    filemode='w') 

logging.debug('debug message') 

logging.info('info message') 

logging.warning('warning message') 

logging.error('error message') 

logging.critical('critical message')

配置参数:

logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:

filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。

filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。

format:指定handler使用的日志显示格式。

datefmt:指定日期时间格式。

level:设置rootlogger(后边会讲解具体概念)的日志级别

stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。

format参数中可能用到的格式化串:

%(name)s Logger的名字

%(levelno)s 数字形式的日志级别

%(levelname)s 文本形式的日志级别

%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有

%(filename)s 调用日志输出函数的模块的文件名

%(module)s 调用日志输出函数的模块名

%(funcName)s 调用日志输出函数的函数名

%(lineno)d 调用日志输出函数的语句所在的代码行

%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示

%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数

%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒

%(thread)d 线程ID。可能没有

%(threadName)s 线程名。可能没有

%(process)d 进程ID。可能没有

%(message)s用户输出的消息

logger对象配置

import logging

logger = logging.getLogger()# 创建一个handler,用于写入日志文件fh = logging.FileHandler('test.log',encoding='utf-8')

# 再创建一个handler,用于输出到控制台

ch = logging.StreamHandler()

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

fh.setLevel(logging.DEBUG)

fh.setFormatter(formatter)

ch.setFormatter(formatter)

logger.addHandler(fh) #logger对象可以添加多个fh和ch对象

logger.addHandler(ch)

logger.debug('logger debug message')

logger.info('logger info message')

logger.warning('logger warning message')

logger.error('logger error message')

logger.critical('logger critical message')

logging库提供了多个组件:Logger、Handler、Filter、Formatter。Logger对象提供应用程序可直接使用的接口,Handler发送日志到适当的目的地,Filter提供了过滤日志信息的方法,Formatter指定日志显示格式。另外,可以通过:logger.setLevel(logging.Debug)设置级别,当然,也可以通过

fh.setLevel(logging.Debug)单对文件流设置某个级别。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一嘉之言:纸媒危机中的“碎片化”思考 新闻这一行,最后都是拼天赋的 主编没有“死”,即将变成产品经理 媒体新趋势:...
    沙加之伦阅读 3,751评论 2 8
  • 有时 路边的银杏叶 泛黄,飘落 会觉得那是秋 会觉得那很美 会觉得她在说 你已渐渐远去 我在这里等你 有时 车站的...
    汉喵阅读 1,137评论 0 0
  • 早晨。 “你们好,我是路维特,来自玛蒂普斯学院,接你们。” 带着一个金丝眼镜的温文尔雅的少年笑着递出学院徽章,但...
    风中的旅行阅读 3,395评论 1 1
  • TreeMap 是一个有序的key-value集合,它是通过红黑树实现的。(红黑树一种自平衡二叉查找树,是在计算机...
    竹鼠不要中暑阅读 13,221评论 0 6
  • 我的第一个woop已过去一周时间,这一周时间奔着早睡的目标,进行了各种尝试,收获如下: 1.计划第一天,即上周日,...
    池昊育阅读 3,477评论 8 3