首页 > 代码库 > python 学习笔记 -logging模块(日志)

python 学习笔记 -logging模块(日志)

模块级函数

logging.getLogger([name]):返回一个logger对象,如果没有指定名字将返回root logger
logging.debug()、logging.info()、logging.warning()、logging.error()、logging.critical():设定root logger的日志级别
logging.basicConfig():用默认Formatter为日志系统建立一个StreamHandler,设置基础配置并加到root logger中

日志级别
logging.basicConfig():用默认Formatter为日志系统建立一个StreamHandler,设置基础配置并加到root logger中

import loggingimport sysLEVELS = {debug: logging.DEBUG,          info: logging.INFO,          warning: logging.WARNING,          error: logging.ERROR,          critical: logging.CRITICAL}if len(sys.argv) > 1:    level_name = sys.argv[1]    level = LEVELS.get(level_name, logging.NOTSET)    logging.basicConfig(level=level)logging.debug(This is a debug message)logging.info(This is an info message)logging.warning(This is a warning message)logging.error(This is an error message)logging.critical(This is a critical error message)
$ python logging_level_example.py debugDEBUG:root:This is a debug messageINFO:root:This is an info messageWARNING:root:This is a warning messageERROR:root:This is an error messageCRITICAL:root:This is a critical error message$ python logging_level_example.py infoINFO:root:This is an info messageWARNING:root:This is a warning messageERROR:root:This is an error messageCRITICAL:root:This is a critical error message

 

Loggers

Logger.setLevel(lel):指定最低的日志级别,低于lel的级别将被忽略。debug是最低的内置级别,critical为最高
Logger.addFilter(filt)、Logger.removeFilter(filt):添加或删除指定的filter
Logger.addHandler(hdlr)、Logger.removeHandler(hdlr):增加或删除指定的handler
Logger.debug()、Logger.info()、Logger.warning()、Logger.error()、Logger.critical():可以设置的日志级别

 

Handlers

handler对象负责发送相关的信息到指定目的地。可以通过addHandler()方法添加多个多handler
Handler.setLevel(lel):指定被处理的信息级别,低于lel级别的信息将被忽略
Handler.setFormatter():给这个handler选择一个格式
Handler.addFilter(filt)、Handler.removeFilter(filt):新增或删除一个filter对象

 

Formatters

Formatter对象设置日志信息最后的规则、结构和内容,默认的时间格式为%Y-%m-%d %H:%M:%S,下面是Formatter常用的一些信息

%(name)s

Logger的名字

%(levelno)s

数字形式的日志级别

%(levelname)s

文本形式的日志级别

%(pathname)s

调用日志输出函数的模块的完整路径名,可能没有

%(filename)s

调用日志输出函数的模块的文件名

%(module)s

调用日志输出函数的模块名

%(funcName)s

调用日志输出函数的函数名

%(lineno)d

调用日志输出函数的语句所在的代码行

%(created)f

当前时间,用UNIX标准的表示时间的浮 点数表示

%(relativeCreated)d

输出日志信息时的,自Logger创建以 来的毫秒数

%(asctime)s

字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒

%(thread)d

线程ID。可能没有

%(threadName)s

线程名。可能没有

%(process)d

进程ID。可能没有

%(message)s

用户输出的消息

 

 

最后封装成一个类:

# -*- coding: utf-8 -*-import loggingclass Logger():    def __init__(self, logname, loglevel, logger):        ‘‘‘           指定保存日志的文件路径,日志级别,以及调用文件           将日志存入到指定的文件中        ‘‘‘        format_dict = {            1: logging.Formatter(‘%(asctime)s - %(module)s- %(name)s - %(levelname)s - %(message)s‘),            2: logging.Formatter(‘%(asctime)s - %(module)s- %(name)s - %(levelname)s - %(message)s‘),            3: logging.Formatter(‘%(asctime)s - %(name)s - %(module)s- %(levelname)s - %(message)s‘),            4: logging.Formatter(‘%(asctime)s - %(name)s - %(module)s- %(levelname)s - %(message)s‘),            5: logging.Formatter(‘%(asctime)s - %(name)s - %(module)s- %(levelname)s - %(message)s‘)        }        # 创建一个logger        self.logger = logging.getLogger(logger)        self.logger.setLevel(logging.DEBUG)        # 创建一个handler,用于写入日志文件        fh = logging.FileHandler(logname)        fh.setLevel(logging.DEBUG)        # 再创建一个handler,用于输出到控制台        ch = logging.StreamHandler()        ch.setLevel(logging.DEBUG)        # 定义handler的输出格式        # formatter = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘)        formatter = format_dict[int(loglevel)]        fh.setFormatter(formatter)        ch.setFormatter(formatter)        # 给logger添加handler        self.logger.addHandler(fh)        self.logger.addHandler(ch)    def getlog(self):        return self.logger

  

 

python 学习笔记 -logging模块(日志)