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中的函数

原文地址:https://www.cnblogs.com/jiyanjiao-702521/p/9328463.html

时间: 2024-10-18 03:47:03

python中的logging模块学习的相关文章

在python中使用logging模块

import logging logging.basicConfig(level=logging.INFO, filename='mylog.log') logging.info('Starting program') logging.info('Trying to divide 1 by 0') print 1 / 0 logging.info('The division succeeded') logging.info('Ending program') 在python中使用logging模

python 的日志logging模块学习

最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stackoverflow上查询到的一些内容. 官方文档 技术博客 基本用法 下面的代码展示了logging最基本的用法. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 # -*- cod

Python中的logging模块【转】

基本用法 下面的代码展示了logging最基本的用法. 1 # -*- coding: utf-8 -*- 2 3 import logging 4 import sys 5 6 # 获取logger实例,如果参数为空则返回root logger 7 logger = logging.getLogger("AppName") 8 9 # 指定logger输出格式 10 formatter = logging.Formatter('%(asctime)s %(levelname)-8s:

Python中的logging模块

http://python.jobbole.com/86887/ 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stackoverflow上查询到的一些内容. 官方文档 技术博客 基本用法 下面的代码展示了logging最基本的用法. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

Python入门之Python中的logging模块

基本用法 下面的代码展示了logging最基本的用法. import logging import sys # 获取logger实例,如果参数为空则返回root logger logger = logging.getLogger("AppName") # 指定logger输出格式 formatter = logging.Formatter('%(asctime)s %(levelname)-8s: %(message)s') # 文件日志 file_handler = logging.

【python,logging】python中的logging模块

本文章转自kenby的博客,比较全面移动,转来留作以后使用. http://kenby.iteye.com/blog/1162698 一.从一个使用场景开始 import logging # 创建一个logger logger = logging.getLogger('mylogger') logger.setLevel(logging.DEBUG) # 创建一个handler,用于写入日志文件 fh = logging.FileHandler('test.log') fh.setLevel(l

python 的日志logging模块学习【转】

1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message') logging.info('This is info message') logging.warning('This is warning message') 屏幕上打印: WARNING:root:This is warning message 默认情况下,logging将日志打印到屏幕,日志级别为WARNING: 日志级别大小关系为:CRITICAL > E

【转载】python 的日志logging模块学习

1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message')logging.info('This is info message')logging.warning('This is warning message') 屏幕上打印:WARNING:root:This is warning message 默认情况下,logging将日志打印到屏幕,日志级别为WARNING:日志级别大小关系为:CRITICAL > ERROR

Python中re(正则表达式)模块学习

re.match re.match 尝试从字符串的开始匹配一个模式,如:下面的例子匹配第一个单词.3 import re text = "JGood is a handsome boy, he is cool, clever, and so on..." m = re.match(r"(\w+)\s", text) if m: print m.group(0), '\n', m.group(1) else: print 'not match' re.match的函数