Python记录程序运行时日志信息库logging的使用

部署运行你感兴趣的模型镜像

安装logging

使用国内镜像源安装logging

  • pip install logging -i https://mirrors.aliyun.com/pypi/simple


logging说明

  • logging模块用于记录程序运行时日志信息,核心组件包括Logger(日志器)、Handler(处理器)、Formatter(格式器)、Filter(过滤器)


一、日志级别(level)

  • 低到高为DEBUG(调试)、INFO(信息)、WARNING(警告)、ERROR(错误)、CRITICAL(严重错误)
  • 设置level=logging.DEBUG时,会记录所有级别;
  • 若设为level=logging.WARNING,只记录WARNING及以上级别(默认级别)


二、日志格式(format)

  • 通过format参数自定义,常用占位符:
    • %(asctime)s :日志记录时间
    • %(levelname)s:日志级别(大写)
    • %(message)s :日志内容
    • %(filename)s :文件名
    • %(lineno)d :行号


三、日志处理器(Handlers)

  • 日志记录信息可以输出到不同地方,如控制台、文件、远程服务器等。常见的处理器包括:
  • Logger: 记录器,应用程序直接使用的接口
  • StreamHandler:输出到控制台
  • FileHandler:输出到文件
  • RotatingFileHandler:支持日志文件滚动。


四、输出到控制台和文件(不同级别和格式)


import logging
from logging.handlers import RotatingFileHandler

# 同时输出日志到控制台和文件 - 不同级别和格式
def logger_diff_levels_format():
    logger = logging.getLogger('xLogerA') # 创建日志器
    logger.setLevel(logging.DEBUG) # 设置总日志级别

    # 控制台处理器
    streamHandler = logging.StreamHandler()
    streamHandler.setLevel(logging.INFO) # 日志级别
    strFormatter = logging.Formatter('%(asctime)s - %(levelname)-8s : %(message)s') # 日志格式
    streamHandler.setFormatter(strFormatter) # 设置日志格式
    logger.addHandler(streamHandler) # 添加到日志器

    # 文件处理器
    fileHandler = logging.FileHandler('xLoger.log', mode='a', encoding='utf-8')
    fileHandler.setLevel(logging.DEBUG)
    filFormatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)-8s - %(filename)s - %(funcName)s - %(lineno)d: %(message)s')
    fileHandler.setFormatter(filFormatter)
    logger.addHandler(fileHandler)


    logger.info('Hello, xLogger......1')
    logger.debug('Hello, xLogger......2')
    logger.warning('Hello, xLogger......3')
    logger.error('Hello, xLogger......4')
    logger.critical('Hello, xLogger......5')




在这里插入图片描述




五、输出到控制台和文件(相同级别和格式)


import logging
from logging.handlers import RotatingFileHandler

# 同时输出日志到控制台和文件
def logger_same_levels_format():
    logger  = logging.getLogger('xLogerB')
    logging.basicConfig(
        level    = logging.DEBUG, # 日志级别
        format   = '%(asctime)s - %(name)s - %(levelname)-8s : %(message)s', # 日志格式
        # datefmt  = '%Y-%m-%d %H:%M:%S', # 时间格式
        handlers = \
        [
            logging.FileHandler('xTest.log', mode='a', encoding='utf-8'), # 文件处理器
            logging.StreamHandler() #控制台处理器
        ], # 日志处理器
    )

    logger.info('Hello, xLogger1')
    logger.debug('Hello, xLogger2')
    logger.warning('Hello, xLogger3')
    logger.error('Hello, xLogger4')
    logger.critical('Hello, xLogger5')




在这里插入图片描述




六、日志文件按大小轮转


import logging
from logging.handlers import RotatingFileHandler

# 日志文件按大小轮转(防止文件过大)
def logger_files_rotated():
    logger = logging.getLogger('xLogerA') # 创建日志器
    logger.setLevel(logging.DEBUG) # 设置总日志级别

    # 控制台处理器
    streamHandler = logging.StreamHandler()
    streamHandler.setLevel(logging.INFO) # 日志级别
    strFormatter = logging.Formatter('%(asctime)s - %(levelname)-8s : %(message)s') # 日志格式
    streamHandler.setFormatter(strFormatter) # 设置日志格式
    logger.addHandler(streamHandler) # 添加到日志器

    # 文件处理器
    file_rotate_handler = RotatingFileHandler( "file_rotate.log",
                                                maxBytes=5 * 1024,  # 5KB
                                                backupCount=20,     #保留旧日志文件
                                                encoding="utf-8")
    file_rotate_handler.setLevel(logging.DEBUG) # 日志级别
    filFormatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)-8s - %(filename)s - %(funcName)s - %(lineno)d: %(message)s') # 日志格式
    file_rotate_handler.setFormatter(filFormatter) # 设置日志格式
    logger.addHandler(file_rotate_handler) # 添加到日志器



    # 触发轮转
    for i in range(100):
        logger.info(f'Hello, xLogger1 count......{i}')
        logger.debug(f'Hello, xLogger2 count......{i}')
        logger.warning(f'Hello, xLogger3 count......{i}')
        logger.error(f'Hello, xLogger4 count......{i}')
        logger.critical(f'Hello, xLogger5 count......{i}')




在这里插入图片描述




七、简便写法


import logging
from logging.handlers import RotatingFileHandler

logging.basicConfig(
    level    = logging.DEBUG, # 日志级别
    format   = '%(asctime)s - %(levelname)s : %(message)s', # 日志格式  %(funcName)s - 函数名
    handlers = \
    [
        logging.FileHandler('log_data.log', encoding='utf-8'),
        logging.StreamHandler()
    ]
)
logger = logging.getLogger(__name__) # 创建日志记录器
logger.info('Hello xLogger1')
logger.debug('Hello, xLogger2')
logger.warning('Hello, xLogger3')
logger.error('Hello, xLogger4')
logger.critical('Hello, xLogger5')

在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值