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 ...
随机推荐
- PyCharm Debug 调试
断点(breakpoint),表示标记一行的位置,当程序运行到该行代码的时候,会将程序暂时暂停,以便对该行代码进行分析. 编辑python脚本,debug.py def hello(): return ...
- Linux常用软件启动、停止、重启命令
一.PHP 启动命令: /usr/local/php5/sbin/php-fpm 停止命令: pkill php-fpm 二.MySQL 启动命令: /etc/init.d/mysqld start ...
- iOS开发之线程组解决请求多个接口数据,完成后,再刷新界面
1.多任务请求接口,完成后,在刷新数据,常用方法 2018年07月18日 16:34:38 hbblzjy 阅读数:1382 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...
- iRate---一个跳转AppStore评分弹窗
https://www.aliyun.com/jiaocheng/357479.html 摘要:gitHub地址:https://github.com/nicklockwood/iRate可以通过配置 ...
- 05Hadoop 概论
Hadoop的思想之源:Google Google搜索引擎,Gmail,安卓,AppspotGoogle Maps,Google earth,Google 学术,Google翻译,Google+,下一 ...
- semantic-ui 容器与栅格
semantic中可以指定one-sixteen这16个单词来指定网格column所占的长度.也就是说,在网页中,一行最多只有16个column,超过16个之后,自动移到下一行. 栅格可以使用i,di ...
- Java Core - static关键字的理解
一.基本常识 二.关于main方法 我们最常见的static方法就是main方法,至于为什么main方法必须是static的,现在就很清楚了.因为程序在执行main方法的时候没有创建任何对象,因此只有 ...
- MySQL慢查询日志配置方式 slow_query_log
MySQL慢查询(一) - 开启慢查询 - 鲁玉成 - 博客园 https://www.cnblogs.com/luyucheng/p/6265594.html mysql开启慢查询方法 - lava ...
- 什么是arp协议?
转自:https://blog.csdn.net/tigerjibo/article/details/7351992 ARP (Address Resolution Protocol) 是个地址解析协 ...
- vue传参
<template> <ul> <li v-for="item in list" :key="item.id"> <b ...