Python logging模块学习笔记


Posted in Python onMay 24, 2014

模块级函数

logging.getLogger([name]):返回一个logger对象,如果没有指定名字将返回root logger
logging.debug()、logging.info()、logging.warning()、logging.error()、logging.critical():设定root logger的日志级别
logging.basicConfig():用默认Formatter为日志系统建立一个StreamHandler,设置基础配置并加到root logger中

示例:logging_level_example.py

import logging
import sysLEVELS = {'debug': logging.DEBUG,
          'info': logging.INFO,
          'warning': logging.WARNING,
          'error': logging.ERROR,
          'critical': logging.CRITICAL}
if len(sys.argv) > 1:
    level_name = sys.argv[1]
    level = LEVELS.get(level_name, logging.NOTSET)
    logging.basicConfig(level=level)
logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical error message')

输出:
$ python logging_level_example.py debug
DEBUG:root:This is a debug message
INFO:root:This is an info message
WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical error message
$ python logging_level_example.py info
INFO:root:This is an info message
WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical error message

Loggers

Logger.setLevel(lel):指定最低的日志级别,低于lel的级别将被忽略。debug是最低的内置级别,critical为最高
Logger.addFilter(filt)、Logger.removeFilter(filt):添加或删除指定的filter
Logger.addHandler(hdlr)、Logger.removeHandler(hdlr):增加或删除指定的handler
Logger.debug()、Logger.info()、Logger.warning()、Logger.error()、Logger.critical():可以设置的日志级别

示例:simple_logging_module.py

import logging# create logger
logger = logging.getLogger("simple_example")
logger.setLevel(logging.DEBUG)
# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# create formatter
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
# add formatter to ch
ch.setFormatter(formatter)
# add ch to logger
logger.addHandler(ch)
# "application" code
logger.debug("debug message")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
logger.critical("critical message")

输出:
$ python simple_logging_module.py
2005-03-19 15:10:26,618 - simple_example - DEBUG - debug message
2005-03-19 15:10:26,620 - simple_example - INFO - info message
2005-03-19 15:10:26,695 - simple_example - WARNING - warn message
2005-03-19 15:10:26,697 - simple_example - ERROR - error message
2005-03-19 15:10:26,773 - simple_example - CRITICAL - critical message

Handlers

handler对象负责发送相关的信息到指定目的地。可以通过addHandler()方法添加多个多handler
Handler.setLevel(lel):指定被处理的信息级别,低于lel级别的信息将被忽略
Handler.setFormatter():给这个handler选择一个格式
Handler.addFilter(filt)、Handler.removeFilter(filt):新增或删除一个filter对象

Formatters

Formatter对象设置日志信息最后的规则、结构和内容,默认的时间格式为%Y-%m-%d %H:%M:%S,下面是Formatter常用的一些信息

%(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 用户输出的消息

最后来个完整例子:

import logging# set up logging to file - see previous section for more details
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
                    datefmt='%m-%d %H:%M',
                    filename='/temp/myapp.log',
                    filemode='w')
# define a Handler which writes INFO messages or higher to the sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# set a format which is simpler for console use
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
# tell the handler to use this format
console.setFormatter(formatter)
# add the handler to the root logger
logging.getLogger('').addHandler(console)
# Now, we can log to the root logger, or any other logger. First the root...
logging.info('Jackdaws love my big sphinx of quartz.')
# Now, define a couple of other loggers which might represent areas in your
# application:
logger1 = logging.getLogger('myapp.area1')
logger2 = logging.getLogger('myapp.area2')
logger1.debug('Quick zephyrs blow, vexing daft Jim.')
logger1.info('How quickly daft jumping zebras vex.')
logger2.warning('Jail zesty vixen who grabbed pay from quack.')
logger2.error('The five boxing wizards jump quickly.')

运行后,在终端看到的结果

root        : INFO     Jackdaws love my big sphinx of quartz.
myapp.area1 : INFO     How quickly daft jumping zebras vex.
myapp.area2 : WARNING  Jail zesty vixen who grabbed pay from quack.
myapp.area2 : ERROR    The five boxing wizards jump quickly.

在日志文件中的结果

10-22 22:19 root         INFO     Jackdaws love my big sphinx of quartz.
10-22 22:19 myapp.area1  DEBUG    Quick zephyrs blow, vexing daft Jim.
10-22 22:19 myapp.area1  INFO     How quickly daft jumping zebras vex.
10-22 22:19 myapp.area2  WARNING  Jail zesty vixen who grabbed pay from quack.
10-22 22:19 myapp.area2  ERROR    The five boxing wizards jump quickly.

发现DEBUG信息只有在文件中出现,这是因为StreamHandler中setLevel是INFO,可以看出Logger.setLevel()和handler.setLevel()的区别

详细信息请参阅 http://docs.python.org/library/logging.html

Python 相关文章推荐
Python常用内置函数总结
Feb 08 Python
python中使用序列的方法
Aug 03 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
Dec 08 Python
Flask实现跨域请求的处理方法
Sep 27 Python
python TF-IDF算法实现文本关键词提取
May 29 Python
python 绘制拟合曲线并加指定点标识的实现
Jul 10 Python
解决Python使用列表副本的问题
Dec 19 Python
使用pycharm和pylint检查python代码规范操作
Jun 09 Python
使用Keras构造简单的CNN网络实例
Jun 29 Python
解决pip install psycopg2出错问题
Jul 09 Python
Python 数据科学 Matplotlib图库详解
Jul 07 Python
Python中的嵌套循环详情
Mar 23 Python
Python学习笔记之常用函数及说明
May 23 #Python
从零学python系列之教你如何根据图片生成字符画
May 23 #Python
从零学python系列之从文件读取和保存数据
May 23 #Python
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
May 23 #Python
从零学python系列之新版本导入httplib模块报ImportError解决方案
May 23 #Python
从零学python系列之数据处理编程实例(二)
May 22 #Python
从零学python系列之数据处理编程实例(一)
May 22 #Python
You might like
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
原生php实现excel文件读写的方法分析
2018/04/25 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
c#+jquery实现获取radio和checkbox的值
2020/09/12 Javascript
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
js将键值对字符串转为json字符串的方法
2018/03/30 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
Vue动态控制input的disabled属性的方法
2018/06/26 Javascript
node将geojson转shp返回给前端的实现方法
2019/05/29 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
2020/04/10 Javascript
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python写的一个文本编辑器
2014/01/23 Python
跟老齐学Python之玩转字符串(3)
2014/09/14 Python
python 截取 取出一部分的字符串方法
2017/03/01 Python
python使用tkinter实现简单计算器
2018/01/30 Python
计算机二级python学习教程(2) python语言基本语法元素
2019/05/16 Python
使用Python在Windows下获取USB PID&VID的方法
2019/07/02 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
2019/08/16 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
2019/12/04 Python
python读取与处理netcdf数据方式
2020/02/14 Python
英国赛车、汽车改装和摩托车零件购物网站:Demon Tweeks
2018/10/29 全球购物
Bibloo罗马尼亚网站:女装、男装、童装及鞋子和配饰
2019/07/20 全球购物
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
线程同步的方法
2016/11/23 面试题
办公室内勤工作职责
2013/12/11 职场文书
国旗下讲话演讲稿
2014/05/08 职场文书
推普周国旗下讲话稿
2014/09/21 职场文书
党委班子纠正“四风”问题整改措施
2014/10/28 职场文书
五一劳动节活动总结
2015/02/09 职场文书
2015年大学生工作总结
2015/04/21 职场文书
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python
Mysql基础知识点汇总
2021/05/26 MySQL
mybatis源码解读之executor包语句处理功能
2022/02/15 Java/Android