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模块学习的更多相关文章

  1. Python中的logging模块就这么用

    Python中的logging模块就这么用 1.日志日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRITICALDEBUG:详细的信息,通常只出现在诊断问题 ...

  2. python中日志logging模块的性能及多进程详解

    python中日志logging模块的性能及多进程详解 使用Python来写后台任务时,时常需要使用输出日志来记录程序运行的状态,并在发生错误时将错误的详细信息保存下来,以别调试和分析.Python的 ...

  3. Python中的logging模块

    http://python.jobbole.com/86887/ 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stack ...

  4. Python入门之Python中的logging模块

    基本用法 下面的代码展示了logging最基本的用法. import logging import sys # 获取logger实例,如果参数为空则返回root logger logger = log ...

  5. Python中的logging模块【转】https://www.cnblogs.com/yelin/p/6600325.html

    [转]https://www.cnblogs.com/yelin/p/6600325.html 基本用法 下面的代码展示了logging最基本的用法. 1 # -*- coding: utf-8 -* ...

  6. Python 中 对logging 模块进行封装,记录bug日志、日志等级

    是程序产生的日志 程序员自定义设置的 收集器和渠道级别那个高就以那个级别输出 日志和报告的作用: 报告的重点在于执行结果(执行成功失败,多少用例覆盖),返回结果 日志的重点在执行过程当中,异常点,哪里 ...

  7. python中的xlrd模块学习

    1.xlrd模块主要用于excel表格的读取,支持xlsx和xls:xlwt主要用于excel的写,库的读取 2.常用单元格中的数据类型 0.empty(空的):1.string(text):2.nu ...

  8. 【python,logging】python中的logging模块

    本文章转自kenby的博客,比较全面易懂,转来留作以后使用. http://kenby.iteye.com/blog/1162698 一.从一个使用场景开始 import logging # 创建一个 ...

  9. python 的日志logging模块学习

    1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message') logging.info('This is info messa ...

随机推荐

  1. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 访问记录功能改进

    当用户数据非常庞大时需要一个功能,就是统计各种账户的访问系统的情况,用户数量的各种参数需要让管理者心里有个数. 1:信息系统中有多少有效账户?可以很方便能知道具体个数,让管理者心里有个数. 2:某个公 ...

  2. 如何让.net程序支持TLS1.2

    1.将.Net FrameWork设置成4.6以上版本 2.在需要的类中引入命名空间 using System.Net; 3.在程序调用接口(如支付)的地方,加一段代码即可 System.Net.Se ...

  3. shell 小工具

    1.打印进度条(待完善) #!/bin/sh printf -- 'Performing asynchronous action..'; DONE=; printf -- '............. ...

  4. AtCoder Beginner Contest 049 & ARC065 連結 / Connectivity AtCoder - 2159 (并查集)

    Problem Statement There are N cities. There are also K roads and L railways, extending between the c ...

  5. R语言

    什么是R语言编程? R语言是一种用于统计分析和为此目的创建图形的编程语言.不是数据类型,它具有用于计算的数据对象.它用于数据挖掘,回归分析,概率估计等领域,使用其中可用的许多软件包. R语言中的不同数 ...

  6. R语言绘制直方图,

    直方图: 核密度函数: 练习题目1: 绘制出15位同学体重的直方图和核密度估计图,并与正态分布的概率密度函数作对比 代码如下: > w <- c(75.0, 64.0, 47.4, 66. ...

  7. MongoDB Redis

    MongoDB Redis设置用户名密码了吗?看看shodan这款邪恶的搜索引擎吧!~   早上看新闻的时候看到了个醒目的新闻 开源中国:MongoDB 赎金事件持续发酵,究竟是谁之过?博客园:Mon ...

  8. 记第一次多用户在Git提交代码

    今天第一次进行了多用户(其实就两人)在自建Git服务器提交代码. 先记录碰到的问题:首先是本地提交代码时,进行了add,commit后,在push时碰到服务器故障,待设置好服务器后,再push时,却p ...

  9. mysql_单表查询

    单表查询 比较符 当在子句中使用 <. >. <=. >=. <>或 !=时,字段的名字不加引号.如果使用引号,则查询出的结果为空,并且不会报错. ; 等号 当在子 ...

  10. Python之操作redis数据库

    使用redis模块 一.操作redis 1.添加信息 (1)直接建key-value信息: 右键-Add New Key,手动添加key和value 右键-Console,打开控制台,写入命令 (2) ...