logging模块

发布时间 2023-03-23 15:47:35作者: yy9knsg
# coding=utf-8

import logging
from logging import handlers
import time

def mylogger():
    #创建一个记录器,命名为test
    logger = logging.getLogger('test')
    #告诉它要记录哪些级别的日志(具体等级在下面#1)(与下面setLevel的区别)
    logger.setLevel(level=logging.DEBUG)
    
    #输出格式(参数在下面#2)
    formatter = logging.Formatter('%(asctime)s - %(filename)s - %(lineno)d - %(name)s - %(levelname)s: %(message)s')
    
    #handler是设置输出到哪里去
    #StreamHandler是输出到控制台,里面的setLevel是设置给handler设是告诉它要输出哪些级别的日志(与上面setLevel的区别),
    stream_handler = logging.StreamHandler()
    stream_handler.setLevel(logging.DEBUG)
    stream_handler.setFormatter(formatter)
    logger.addHandler(stream_handler)
    
    #FileHandler是输出到文件'test2.log'
    file_handler = logging.FileHandler('test2.log')
    file_handler.setLevel(logging.DEBUG)
    file_handler.setFormatter(formatter)
    logger.addHandler(file_handler)
    
    #TimedRotatingFileHandler是按照时间自动分割日志文件,具体规则在下面#3
    time_rotating_file_handler = handlers.TimedRotatingFileHandler(filename='rotating_test.log', when='S', backupCount=3)
    time_rotating_file_handler.setLevel(logging.DEBUG)
    time_rotating_file_handler.setFormatter(formatter)
    logger.addHandler(time_rotating_file_handler)

    return logger

if __name__ == '__main__':
    mylogger = mylogger()
    for i in range(10):
        i = i * 2
        time.sleep(3)
        mylogger.debug('result is %s' % i)


#1   日志级别
#  DEBUG	   详细信息,一般只在调试问题时使用。
#  INFO	       证明事情按预期工作。
#  WARNING     某些没有预料到的事件的提示,或者在将来可能会出现的问题提示。例如:磁盘空间不足。但是软件还是会照常运行。
#  ERROR       由于更严重的问题,软件已不能执行一些功能了。
#  CRITICAL	   严重错误,表明软件已不能继续运行了。
#
#
#2   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  用户输出的消息
#  
#  
#3   按照时间自动分割日志文件 
#  time_rotating_file_handler = logging.handlers.TimedRotatingFileHandler(filename="loaddata.log", when="D", interval=1, backupCount=30)
#  interval是时间间隔,backupCount用于指定保留的备份文件的个数(其中没有后缀的为最新日志文件)
#  when参数是一个字符串。表示时间间隔的单位,不区分大小写。它有以下取值:
#    S 秒
#    M 分
#    H 小时
#    D 天
#    W 每星期(interval==0时代表星期一)
#    midnight 每天凌晨
#  
#4    logging.handlers.RotatingFileHandler为按照大小自动分割日志文件
#