1.logging模块提供了四个组件
logger:日志类,有两个功能
1)配置日志的等级,处理器handler,过滤器filter
logger.setLevel(logging.INFO)
logger.addHandler(handler)
logger.addFilter(filter)
2)写日志
logger.info()

handler:处理器类,实际写日志的类
常用的处理器有StreamHandler和FileHandler
StreamHandler将日志输出到stream,如sys.stdout,sys.stderr
FileHandler将日志输出到文件
处理器类可以配置自己的等级,过滤器
一个logger可以配置多个处理器类

filter:过滤器类,过滤日志等级,内容
使用示例如下:
class InfoFilter(logging.Filter):
def filter(self,rec):
reurn rec.levelno==logging.INFO
logger.addFilter(InfoFilter())

formatter:内容格式化类,格式化输出的内容
格式化配置,使用%(<dict key>)s的形式,具体有哪些关键字,可以参照官网的介绍。
使用示例如下:
fmt='%(asctime)s - %(filename)s:%(lineno)s - %(name)s - %(message)s'
formatter=logging.Formatter(fmt)
handler.setFormatter(formatter)

2.logger对象
使用logging.getLogger(name=None)函数找到一个logger对象,当name指定的logger不存在时,会自动创建一个该名称的对象,保存在logging.manage的loggerDict中。

3.logging日志输出流程

logger输出日志的流程:
1)用户代码调用打印日志函数(logging.info(),logging.debug()等)
2)若希望打印的日志级别不够,则流程停止。否则进入步骤3
3)建立一个LogRecord对象,该对象代表打印的日志
4)判断这条日志是否被filter过滤掉,如果被过滤,流程停止。否则进入步骤5
5)logger将LogRecord传递到它定义的handlers,进行处理
6)判断当前logger的propagate属性,为0,则流程停止,否则进入步骤7
7)判断当前logger有无父logger,如果没有,流程停止,否则设置当前logger为它的父logger,继续执行步骤5
注:logger对象是有继承关系的,如名为a.b,a.c的logger都是名为a的子logger,并且所有的logger对象都继承自root,如果子对象没有添加handler等配置,会从父对象继承,这样可以通过继承关系来复用配置。

handler处理日志的过程:
1)如果当前LogRecord的级别小于handler所设置的LogLevel,则停止流程,否则进入步骤2
2)判断当前LogRecord是否被handler设置的filter过滤,如果被过滤,流程停止,否则日志输出到最终目的地。

4.logging使用示例
logging有三种配置方式
1)代码定义logger,handler等

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import logging.config handler = logging.StreamHandler()
fmt = '%(asctime)s - %(filename)s:%(lineno)s - %(name)s - %(message)s' formatter = logging.Formatter(fmt) # 实例化formatter
handler.setFormatter(formatter) # 为handler添加formatter logger = logging.getLogger('tst') # 获取名为tst的logger
logger.addHandler(handler) # 为logger添加handler
logger.setLevel(logging.DEBUG) logger.info('first info message')
logger.debug('first debug message')

2)logging配置文件
loggin.conf采用了模式匹配的方式进行配置,正则表达式是r'^[(.*)]$',从而匹配出所有的组件。对于同一个组件具有多个实例的情况使用逗号‘,’进行分隔。对于一个实例的配置采用componentName_instanceName配置块。使用这种方式还是蛮简单的。
logging.conf

[loggers]
keys=root,simpleExample [handlers]
keys=consoleHandler [formatters]
keys=simpleFormatter [logger_root]
level=DEBUG
handlers=consoleHandler [logger_simpleExample]
level=DEBUG
handlers=consoleHandler
qualname=simpleExample
propagate=0 [handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,) [formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import logging.config logging.config.fileConfig('logging.conf') # create logger
logger = logging.getLogger('simpleExample') # 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')

3)logging配置字典

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import logging.config LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'loggers': {
'test': {
'handlers': ['console'],
'level': 'ERROR',
},
},
}
logging.config.dictConfig(LOGGING)
logger = logging.getLogger('test')
logger.info('info message dict')
logger.warn('warn message dict')
logger.error('error message dict')
logger.critical('critical message dict')

python logging模块的更多相关文章

  1. python logging模块可能会令人困惑的地方

    python logging模块主要是python提供的通用日志系统,使用的方法其实挺简单的,这块就不多介绍.下面主要会讲到在使用python logging模块的时候,涉及到多个python文件的调 ...

  2. python logging模块使用

    近来再弄一个小项目,已经到收尾阶段了.希望加入写log机制来增加程序出错后的判断分析.尝试使用了python logging模块. #-*- coding:utf-8 -*- import loggi ...

  3. 读懂掌握 Python logging 模块源码 (附带一些 example)

    搜了一下自己的 Blog 一直缺乏一篇 Python logging 模块的深度使用的文章.其实这个模块非常常用,也有非常多的滥用.所以看看源码来详细记录一篇属于 logging 模块的文章. 整个 ...

  4. (转)python logging模块

    python logging模块 原文:http://www.cnblogs.com/dahu-daqing/p/7040764.html 1 logging模块简介 logging模块是Python ...

  5. Python logging 模块学习

    logging example Level When it's used Numeric value DEBUG Detailed information, typically of interest ...

  6. python logging—模块

    python logging模块 python logging提供了标准的日志接口,python logging日志分为5个等级: debug(), info(), warning(), error( ...

  7. Python logging模块无法正常输出日志

    废话少说,先上代码 File:logger.conf [formatters] keys=default [formatter_default] format=%(asctime)s - %(name ...

  8. 0x03 Python logging模块之Formatter格式

    目录 logging模块之Formatter格式 Formater对象 日志输出格式化字符串 LogRecoder对象 时间格式化字符串 logging模块之Formatter格式 在记录日志是,日志 ...

  9. 0x01 Python logging模块

    目录 Python logging 模块 前言 logging模块提供的特性 logging模块的设计过程 logger的继承 logger在逻辑上的继承结构 logging.basicConfig( ...

  10. Python Logging模块的简单使用

    前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...

随机推荐

  1. Python的平凡之路(21)

    上节内容回顾:1.请求周期url> 路由 > 函数或类 > 返回字符串或者模板语言?Form表单提交:    提交 -> url > 函数或类中的方法     - ... ...

  2. 到入百度LSS framework Reason: image not found

    dyld: Library not loaded: @rpath/VideoCore.framework/VideoCore Referenced from: /var/containers/Bund ...

  3. Oracle中的MD5加密详解

    一.技术点 1. DBMS_OBFUSCATION_TOOLKIT.MD5 DBMS_OBFUSCATION_TOOLKIT.MD5是MD5编码的数据包函数,但偶在使用select DBMS_OBFU ...

  4. 使用JPype实现Python调用JAVA程序

    ''' Created on 2016年6月1日 @author: cero ''' import jpype jvmPath = jpype.getDefaultJVMPath() ext_clas ...

  5. java开发模式学习

    1.瀑布模式 这种模式适合小项目,一层层进行编码,没有规模的设计, 2.原型模式 先做模板给客户在做实体 3.面向对象模式 用面向对象的思想进行开发 4.螺旋模式 从内到外一层层开,

  6. Parameter index out of range (2 > number of parameters, which is 1)

    今天在实现一个功能时遇到一个问题,解决了很久.结果是#{}与${}使用错误的原因.但是具体原因还不是很清楚,写此篇总结,知道的可以交流. 具体描述为:通过教师的头衔(1高级讲师2首席讲师)及名称进行模 ...

  7. vld使用

    1.下载VLD官方版本 2.安装 3.在vs里面的属性里->c/c++->常规->副含附加目录  C:\Program Files (x86)\Visual Leak Detecto ...

  8. TopCoder比赛总结表

    TopCoder                        250                              500                                 ...

  9. SQLite数据库在多线程写锁文件的解决办法

    参考了很多SQLITE数据库多线程的解决办法 我自己写了一个SQLITEHELPER 来解决这个问题 希望大家多多指教 调用的时候  SQLLiteDBHelper _SQLLiteDBHelper ...

  10. ubuntu10.04.4下安装JDK

    第一步:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html下载安装包(本来是可以通过 ...