Python Logging 模块研究
背景在一个新的项目里面加入了日志功能,想自己写一个,但是一个偶然的机会,通过google发现Python内建了一个非常强大的日志(log)模块:l...
背景
在一个新的项目里面加入了日志功能,想自己写一个,但是一个偶然的机会,通过google发现Python内建了一个非常强大的日志(log)模块:logging。粗略的研究了一下,下面是我的一些心得札记。
为什么使用日志
追踪程序的一些运行信息,以达到时刻了解程序运行的状况,快速捕获程序的异常,及时发现程序错误的目的
logging模块简介
从Python2.3起,Python的标准库加入了logging模块.logging模块给运行中的应用提供了一个标准的信息输出接口.典型的logging机制实现是把要输出的数据简单地写到一个txt文件中去.写log文件的方式是一种常见的打log的方式,而logging模块提供的更多,它可以把输出信息输出到所有类文件的对象中去,甚至TCP和UDP的sockets,email服务器,Unix的syslog系统,NT系列的事件log系统,内存的buffer和HTTP服务器,当然还有”真正的”文件中去.
引入logging模块:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import logging #import logging module#使用logging模块:class CLog: #---------------------------------------------------------------------------- def __init__(self): self.logger = logging.getLogger() fileHandler = logging.FileHandler(LOG_FILE_PATH) formatHandler = logging.Formatter('%(asctime)s %(levelname)s: %(message)s') fileHandler.setFormatter(formatHandler) self.logger.addHandler(fileHandler) self.logger.setLevel(logging.NOTSET) #---------------------------------------------------------------------------- def DebugMessage(self,msg): self.logger.debug(msg) pass oCLog = CLog() |
上面定义了一个简单的log模块,我想用这一段简单的代码来描述一下logging模块
logger
获取log的一个实例,这个部分代码分离做得很好,可以通过增加不同的handler来丰富log实例的特性
FileHandler
指定了Log的输出端是文件,通过传入文件路劲来指定输出文件,我们可以为Log定义其他的输出端例如StreamHandler,以及其他各种复杂的输出方式,文件是可能是最常用的方式,其他方式有待慢慢探索
FormatHandler
FomartHandler指定了FileHandler的输出格式,例如我使用了以下的格式:('%(asctime)s %(levelname)s: %(message)s'),则输出的文本格式为:
2013-07-25 08:20:01,525 INFO: goodbye [127.0.0.1]:60442
有关format的关键字,例如asctime,levelname,可参考LogRecord attributes 官方文档
Level
Logging模块定义了5种log信息的优先级
LevelWhen it’s used
DEBUGDetailed information, typically of interest only when diagnosing problems.
INFOConfirmation that things are working as expected.
WARNINGAn indication that something unexpected happened, or indicative of some problem in the near future (e.g. ‘disk space low’). The software is still working as expected.
ERRORDue to a more serious problem, the software has not been able to perform some function.
CRITICALA serious error, indicating that the program itself may be unable to continue running.
优先级关系:
DEBUG < INFO < WARNING < ERROR < CRITCAL
可以根据 self.logger.debug(msg),self.logger.info(msg),等函数来确定输出信息的优先级
SetLevel
SetLevel函数定义了Log实例对处理log信息的优先级,如果定义的优先级为info,则所有debug的信息都将忽略,不输出到输出端,只输入设定优先级以及设定优先级以上的信息
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( ...
随机推荐
- jQuery 删除元素
通过 jQuery,可以很容易地删除已有的 HTML 元素. 删除元素/内容 如需删除元素和内容,一般可使用以下两个 jQuery 方法: remove() - 删除被选元素(及其子元素) empty ...
- javascript中常用的DOM事件
//常用事件 onclick 点击事件 onmousedown 鼠标按下 onmousemove 鼠标移动 onmouseup 鼠标抬起 onmouseover 鼠标放上 onmouseout 鼠标放 ...
- Java----多线程知识点归纳(概念)
一.线程与进程的区别: 多个进程的内部数据和状态都是完全独立的,而多线程是共享一块内存空间和一组系统资源,有可能互相影响. ?线程本身的数据通常只有寄存器数据,以及一个 程序执行时使用的堆栈,所以线程 ...
- undefined与null的区别(待修整)
没有实体的对象称为空对象.只用对象的引用,而不存在引用的实体对象 就叫做空对象 在常见的强类型语言中,通常有一个表示"空"的值,比如NULL.但是在Javascript中,空(或者 ...
- SQL Server的事务处理与高级查询
6.高级查询与脚本 6.1子查询 位于SELECT查询中的SELECT查询. 6.11 标量表达式 select id,val,val-(select avg(val) from tbltest) f ...
- Idea中运行Testng时,报SAXParseException:parallel为none的问题原因及解决
今天更新了testng的版本为6.9.10, 在idea中运行测试案例时,报错如下: org.testng.TestNGException: org.xml.sax.SAXParseException ...
- css编译工具Sass中混合宏,继承,占位符分别在什么时候使用
//SCSS中混合宏使用 @mixin mt($var){ margin-top: $var; } .block { @include mt(5px); span { display:block; @ ...
- div浮动框居于浏览器窗口中间
代码先贴这里,随后再改 <script language="JavaScript"> document.getElementById('divCenter').styl ...
- Java笔记原生数据类型【二】
1.Java中的数据类型分为: 1)原生类型(primitive Data type) 2.)引用类型(对象类型) (Reference Type) 1.变量和常量: 常量: 就是值不会变化的量: 变 ...
- Sphnix创建文档
http://www.ibm.com/developerworks/cn/opensource/os-sphinx-documentation/ Oracle实例名和服务名