python logging模块
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模块的更多相关文章
- python logging模块可能会令人困惑的地方
python logging模块主要是python提供的通用日志系统,使用的方法其实挺简单的,这块就不多介绍.下面主要会讲到在使用python logging模块的时候,涉及到多个python文件的调 ...
- python logging模块使用
近来再弄一个小项目,已经到收尾阶段了.希望加入写log机制来增加程序出错后的判断分析.尝试使用了python logging模块. #-*- coding:utf-8 -*- import loggi ...
- 读懂掌握 Python logging 模块源码 (附带一些 example)
搜了一下自己的 Blog 一直缺乏一篇 Python logging 模块的深度使用的文章.其实这个模块非常常用,也有非常多的滥用.所以看看源码来详细记录一篇属于 logging 模块的文章. 整个 ...
- (转)python logging模块
python logging模块 原文:http://www.cnblogs.com/dahu-daqing/p/7040764.html 1 logging模块简介 logging模块是Python ...
- Python logging 模块学习
logging example Level When it's used Numeric value DEBUG Detailed information, typically of interest ...
- python logging—模块
python logging模块 python logging提供了标准的日志接口,python logging日志分为5个等级: debug(), info(), warning(), error( ...
- Python logging模块无法正常输出日志
废话少说,先上代码 File:logger.conf [formatters] keys=default [formatter_default] format=%(asctime)s - %(name ...
- 0x03 Python logging模块之Formatter格式
目录 logging模块之Formatter格式 Formater对象 日志输出格式化字符串 LogRecoder对象 时间格式化字符串 logging模块之Formatter格式 在记录日志是,日志 ...
- 0x01 Python logging模块
目录 Python logging 模块 前言 logging模块提供的特性 logging模块的设计过程 logger的继承 logger在逻辑上的继承结构 logging.basicConfig( ...
- Python Logging模块的简单使用
前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...
随机推荐
- MySQL版本升级之5.6到5.7
两种升级方式 In-Place Upgrade: Involves shutting down the old MySQL version, replacing the old MySQL binar ...
- 移动混合开发之android文件管理demo
框架采用cordova,android编译环境为android studio.系统为mac,cordova 环境搭建参考网址:http://cordova.apache.org/docs/en/5.0 ...
- RecyclerView因版本问题无法加载
前几天在学习RecyclerView时候,一直失败,各种加载不上.下面是错误信息 D/AndroidRuntime: Shutting down VM E/AndroidRuntime: FATAL ...
- 搭建java web开发环境、使用eclipse编写第一个java web程序
开发工具:eclipse-jee-juno-SR2-win32-x86_64(请自行官网下载) 使用服务器:apache-tomcat-7.0.35-windows-x64(请自行官网下载) 打开 e ...
- 如何判断pc或者移动端
<script type="text/javascript"> var userAgentInfo = navigator.userAgent; var Agents ...
- npm(cnpm)介绍
1.npm(node package manager) nodejs的包管理器,用于node插件管理(安装.卸载.更新.管理依赖等); 2.使用npm安装安装插件: 1).命令提示符执行 npm in ...
- Html 开发工具 之Hbulider
下载地址 : 百度搜索该名字即可 或 点击此处 选择 文件->新建Web项目 输入项目名称即可 如下图 它会自动生成一些 文件夹 或文件,不需要的删除即可.
- 一道google面试题
输入n,把1-n分成两个和相等的子集,有多少种分法 想了个dp,直接背包也行 #include <iostream> #include <cstdio> using names ...
- 如何用js定义数组,用js来拼接json字段
定义js数组的方式有: var arr = (); var arr = []; var arr = new Array(); 如何拼接成一个json字段. <!DOCTYPE HTML PUBL ...
- JS控制的动态表格
对应的js: function pccAddSignRow() { //读取最后一行的行号,存放在LearnTRLastIndex文本框中 var pccTRLastIndex = findObj(& ...