python中的logging模块学习
Python的logging模块
Logging的基本信息:
l 默认的情况下python的logging模块打印到控制台,只显示大于等于warning级别的日志
l 日志级别:critical > error > warning > info > debug > notset
Logging的基本组件:
1. logger
l logger是一个树形层级结构,输出信息之前都要获得一个logger
l logger = logging.getLogger() 返回一个默认的logger也即rootLogger,并应用默认的日志级别,即只有日志等级大于等于warning级别的信息输出
l 也可以通过logger.setLevel(lel)指定最低的日志级别,可用的日志级别有:
l logging.DEBUG,logging.INFO,Logging.ERROR,logging.CRITICAL;logger.debug(),logger.info().logger.warning(),logger.error(),logger.critical()
2. handler
l handler对象负责发送相关的信息到指定目的地
l handler.setlevel(lel):指定日志级别,低于lel级别的日志将被忽略
l handler.setFormatter():给handler选择一个Formatter
l logging.StreamHandler 可以向类似与sys.stdout或者sys.stderr的任何文件对象(file object)输出信息
l logging.FileHander 用于向一个文件输出日志信息
l logging.handlers.RotatingFileHandler 类似于上面的FileHandler,但是它可以管理文件大小,当文件达到一定大小之后,它会自动将当前日志文件改名,然后创建一个新的同名日志文件继续输出
l logging.handlers.TimeRotatingFileHandler和RotatingFileHandler类似,不过它没有通过判断文件大小来决定何时重新创建日志文件,而是间隔一定时间就自动创建新的日志文件
Formatter
l formatter对象设置日志信息最后的规则,结构和内容,默认的时间格式为%Y-%m-%d %H:%M:%S
Filter
l filter:限制只有满足过滤规则的日志才会输出
l 比如定义了filter = logging.Filter(‘jiyanjiao’),并将这个Filter添加到一个Handler上,则使用该handler的Logger中只有名字带’jiyanjiao’前缀的logger才能输出其日志
下面就来说一下具体的应用吧
l 需求是这样的:想打印自己的log,因为使用print每次都需要编辑替换觉得很麻烦,想让自己的程序更加正规些,也想区分不同级别log的颜色所以写下了如下的代码
import logging
import ctypes '''
定义颜色日志级别颜色变量:
'''
FOREGROUND_WHITE = 0x0007
FOREGROUND_BLUE = 0x01
FOREGROUND_GREEN = 0x02
FOREGROUND_RED = 0x04
FOREGROUND_YELLOW = FOREGROUND_RED | FOREGROUND_GREEN
STD_OUTPUT_HANDLE = -11
std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
def set_color(color, handle=std_out_handle):
bool = ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color)
return bool class mylogger(object): def __init__(self,name='mylogger'):
self.logger = logging.getLogger(name)
self.init_logger() '''
创建一个file_handler,用于写入日志文件
再创建一个stream_handler,用于输出到控制台
定义handler的输出格式formatter
%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(name)s Logger的名字
%(levelname)s 文本形式的日志级别
%(message)s 用户输出的消息
''' def init_logger(self):
self.logger.setLevel(logging.DEBUG)
file_handler = logging.FileHandler('D:/tmp/test.log')
stream_handler = logging.StreamHandler() formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
stream_handler.setFormatter(formatter) self.logger.addHandler(file_handler)
self.logger.addHandler(stream_handler) def debug(self,message,color=FOREGROUND_BLUE):
set_color(color)
self.logger.debug(message)
set_color(FOREGROUND_WHITE) def info(self, message, color=FOREGROUND_GREEN):
set_color(color)
self.logger.info(message)
set_color(FOREGROUND_WHITE) def warn(self,message,color=FOREGROUND_YELLOW):
set_color(color)
self.logger.warn(message)
set_color(FOREGROUND_WHITE) def error(self, message,color=FOREGROUND_RED):
set_color(color)
self.logger.error(message)
set_color(FOREGROUND_WHITE) def critical(self,message,color=FOREGROUND_RED):
set_color(color)
self.logger.critical(message)
set_color(FOREGROUND_WHITE) if __name__ == '__main__':
mylogger = mylogger()
mylogger.debug('这是debug信息')
mylogger.info('这是info信息')
mylogger.warn('这是warning')
mylogger.error('这是error信息')
mylogger.critical('这是critical信息')
打印的结果:

那么可能有同学就有疑问了那么ctypes是什么
l Ctypes是python的一个外部库,提供和c语言兼容的数据类型,可以很方便的调用C DLL中的函数
python中的logging模块学习的更多相关文章
- Python中的logging模块就这么用
Python中的logging模块就这么用 1.日志日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRITICALDEBUG:详细的信息,通常只出现在诊断问题 ...
- python中日志logging模块的性能及多进程详解
python中日志logging模块的性能及多进程详解 使用Python来写后台任务时,时常需要使用输出日志来记录程序运行的状态,并在发生错误时将错误的详细信息保存下来,以别调试和分析.Python的 ...
- Python中的logging模块
http://python.jobbole.com/86887/ 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stack ...
- Python入门之Python中的logging模块
基本用法 下面的代码展示了logging最基本的用法. import logging import sys # 获取logger实例,如果参数为空则返回root logger logger = log ...
- Python中的logging模块【转】https://www.cnblogs.com/yelin/p/6600325.html
[转]https://www.cnblogs.com/yelin/p/6600325.html 基本用法 下面的代码展示了logging最基本的用法. 1 # -*- coding: utf-8 -* ...
- Python 中 对logging 模块进行封装,记录bug日志、日志等级
是程序产生的日志 程序员自定义设置的 收集器和渠道级别那个高就以那个级别输出 日志和报告的作用: 报告的重点在于执行结果(执行成功失败,多少用例覆盖),返回结果 日志的重点在执行过程当中,异常点,哪里 ...
- python中的xlrd模块学习
1.xlrd模块主要用于excel表格的读取,支持xlsx和xls:xlwt主要用于excel的写,库的读取 2.常用单元格中的数据类型 0.empty(空的):1.string(text):2.nu ...
- 【python,logging】python中的logging模块
本文章转自kenby的博客,比较全面易懂,转来留作以后使用. http://kenby.iteye.com/blog/1162698 一.从一个使用场景开始 import logging # 创建一个 ...
- python 的日志logging模块学习
1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message') logging.info('This is info messa ...
随机推荐
- ECS上配置FTP Filezilla
又来搞华为ECS 第一,服务器安装服务端 第二,设置被动模式,把服务器的公网IP填好 第三,生成一个服务器证书,客户端连接时接受 第四,设置自定义的被动连接端口比如 9000-9050 第五,去ECS ...
- Centos7安装Tomcat8
一.下载Tomcat8压缩包 打开tomcat8的下载页面 http://tomcat.apache.org/download-80.cgi 二.解压以及重命名 [root@localhost ~]# ...
- PYTHON访问数据库
PYTHON DB API(规范)框架 可以一次编写同时访问MySql\ Oracle \SQLServer...不同的数据库服务器:统一接口程序的混乱. 1.连接访问:connection(高速路) ...
- python学习之第八篇——字典嵌套之字典中嵌套字典
cities = { 'shanghai':{'country':'china','population':10000,'fact':'good'}, 'lendon':{'country':'eng ...
- PS制作恐怖逼真滴血文字
序言:各位同学们好,今天给大家带来一例恐怖逼真滴血文字效果的制作教程,本人比较喜欢看恐怖游戏,是看不是玩,然后就突发奇想地做了这件作品,最后的效果我很喜欢,而且制作起来难度并不大,在此分享自己在作图时 ...
- JavaScript动态修改html组件form的action属性
用javaScript动态修改html组件form的action属性,可以在提交时再决定处理表单的页面. <%--JavaScript部分--%><script language=& ...
- 使用 Drools 和 JPA & Drools show case in docker hub
使用 Drools 和 JPA 实现持续的实时数据分析https://www.ibm.com/developerworks/cn/java/j-drools5/index.html Drools - ...
- pinpoint vs druid
主流Java数据库连接池分析(C3P0,DBCP,TomcatPool,BoneCP,Druid) - ppjj - 博客园 https://www.cnblogs.com/nizuimeiabc1/ ...
- python3 打开页面后多窗口处理三种方法
多窗口处理三种方法 导包,实例化浏览器from selenium import webdriver fx=webdriver.Firefox()方法一fx.switch_to.window(fx.wi ...
- mybatis源码分析(二)------------配置文件的解析
这篇文章中,我们将讲解配置文件中 properties,typeAliases,settings和environments这些节点的解析过程. 一 properties的解析 private void ...