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中的闭包实例详解
Aug 29 Python
python使用socket进行简单网络连接的方法
Apr 29 Python
Python利用Beautiful Soup模块修改内容方法示例
Mar 27 Python
Python读取指定目录下指定后缀文件并保存为docx
Apr 23 Python
Python制作刷网页流量工具
Apr 23 Python
python实现的二叉树定义与遍历算法实例
Jun 30 Python
Python如何快速上手? 快速掌握一门新语言的方法
Nov 14 Python
10分钟用python搭建一个超好用的CMDB系统
Jul 17 Python
Python从文件中读取指定的行以及在文件指定位置写入
Sep 06 Python
python爬虫爬取网页数据并解析数据
Sep 18 Python
Python 利用argparse模块实现脚本命令行参数解析
Dec 28 Python
Python日志打印里logging.getLogger源码分析详解
Jan 17 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中设置、使用、删除Cookie的解决方法
2013/05/06 PHP
怎样使用php与jquery设置和读取cookies
2013/08/08 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
2017/09/01 PHP
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
Js 时间间隔计算的函数(间隔天数)
2011/11/15 Javascript
打豆豆小游戏 用javascript编写的[打豆豆]小游戏
2013/01/08 Javascript
jQuery bxCarousel实现图片滚动切换效果示例代码
2013/05/15 Javascript
jquery遍历checkbox介绍
2014/02/21 Javascript
基于javascript html5实现3D翻书特效
2016/03/14 Javascript
解决option标签selected="selected"属性失效的问题
2017/11/06 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
2019/09/02 Javascript
JavaScript事件循环及宏任务微任务原理解析
2020/09/02 Javascript
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
Python装饰器用法示例小结
2018/02/11 Python
python3 pandas 读取MySQL数据和插入的实例
2018/04/20 Python
Python supervisor强大的进程管理工具的使用
2019/04/24 Python
python编写简单端口扫描器
2019/09/04 Python
Django项目中使用JWT的实现代码
2019/11/04 Python
基于Python fminunc 的替代方法
2020/02/29 Python
python的sys.path模块路径添加方式
2020/03/09 Python
keras 模型参数,模型保存,中间结果输出操作
2020/07/06 Python
HTML5拖拽功能实现的拼图游戏
2018/07/31 HTML / CSS
瑞典在互联网上最大的宠物商店:Animail
2020/10/31 全球购物
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
酒店门卫岗位职责
2013/12/29 职场文书
大学生自我鉴定评语
2014/01/27 职场文书
美容院店长岗位职责
2014/04/08 职场文书
演讲稿格式
2014/04/30 职场文书
共青团员自我评价范文
2014/09/14 职场文书
股份转让协议书范本
2015/01/27 职场文书
胡雪岩故居导游词
2015/02/06 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
教师师德承诺书2016
2016/03/25 职场文书
idea下配置tomcat避坑详解
2022/04/12 Servers