一、设置日志级别(低->高)

        noset:未设置级别,继承父记录器的级别

        debug:调试信息,记录详细的程序运行细节(如变量值、流程跟踪)

        info:常规信息,记录程序正常运行的关键事件(如服务启动、用户登录)

        warning:警告信息,记录潜在问题(如磁盘空间不足),但程序仍能运行

        error:错误信息,记录严重问题导致功能失效(如数据库连接失败)

        critical:致命错误,记录导致程序崩溃的极端问题(如内存耗尽、系统不可用)

二、设置日志内容的格式

%(levelno)s打印日志级别的数值
%(levelname)s打印日志级别的名称
%(pathname)s打印当前执行程序的路径
%(filename)s打印当前执行的程序名
%(funcName)s打印日志的当前函数
%(asctime)s打印日志的时间
%(thread)d打印线程的ID
%(threadName)s打印线程名称
%(process)d打印进程ID
%(processName)s打印进程名称
%(module)s打印模块名称
%(message)s打印日志信息

三、主要思想/步骤

        1.导入logging模块
        2.创建日志记录器 
        3.设置日志记录器级别 
        4.定义日志处理器
        5.设置处理器格式 
        6.添加处理器到记录器

四、记录日志的方法

        logger.info(' ')

        logger.debug(' ')

        logger.warning(' ')

五、代码实现

        1.创建日志记录器

 logger = logging.getLogger('mylogger')

        2.设置日志记录器级别

 logger.setLevel(logging.DEBUG)

        3.定义日志处理器

                StreamHandler 控制台日志输出

                FileHandler 持久化日志到本地文件

                RotatingFileHandler 基于文件大小轮转日志

                TimedRotatingFileHandler 基于时间轮转日志

        参数说明:

                'logs/all.log'  日志的文件路径

                when='midnight' 每天午夜轮转

                interval=1 间隔1天

                backupCount=7 保留最近7天的日志

                atTime=datetime.time(0,0,0,0)  午夜00:00:00执行轮转

rf_handler = logging.handlers.TimedRotatingFileHandler('logs/all.log',when='midnight',interval=1,backupCount=7,atTime=datetime.time(0,0,0,0))

        4.设置处理器格式

                如果处理器handler不单独设置级别,那么它会继承并使用记录器logger设置的级别

format = logging.Formatter('%(asctime)s - %(levelname)s -%(message)s')
rf_handler.setFormatter(format)

        5.添加处理器到记录器

logger.addHandler(rf_handler)
logger.addHandler(f_handler)

整体代码:

# 生成日志方法
def get_logger():
    logger = logging.getLogger('mylogger')
    logger.setLevel(logging.DEBUG)

    rf_handler = logging.handlers.TimedRotatingFileHandler('logs/all.log',when='midnight',interval=1,backupCount=7,atTime=datetime.time(0,0,0,0))
    format = logging.Formatter('%(asctime)s - %(levelname)s -%(message)s')
    rf_handler.setFormatter(format)

    f_handler = logging.FileHandler('logs/error.log')
    f_handler.setLevel(logging.ERROR)
    format2 = logging.Formatter('%(asctime)s - %(filename)s[:%(lineno)d] - %(message)s)')
    f_handler.setFormatter(format2)

    logger.addHandler(rf_handler)
    logger.addHandler(f_handler)
    return logger
logger = util.get_logger()
# 写入all.log
logger.debug('debug')
# 写入all.log
logger.info('info')
# 写入all.log
logger.warning('warning')
# 同时写入all.log和error.log
logger.error('error')
# 同时写入all.log和error.log
logger.critical('critical')

....敬请期待下一章的内容

更多推荐