python | Logging日志标准库的常见使用方法(手搓日志记录装饰器)


01 基础使用

日志级别从低到高分为:DEBUG < INFO < WARNING < ERROR < CRITICAL
使用前需要设置记录的日志级别,只有大等于该日志级别的日志才会被记录。
例如,设置日志级别为WARNING,则WARNINGERRORCRITICAL三种级别的日志才会被记录。

import logging

# 使用前需要先设置日志级别 这里设置的是DEBUG
logging.basicConfig(level=logging.DEBUG)
logging.debug("这是一个debug消息")
logging.info("这是一个info消息")
logging.warning("这是一个warning消息")
logging.error("这是一个error消息")
logging.critical("这是一个critical消息")

运行这段代码,可以在控制台看到以下输出:

DEBUG:root:这是一个debug消息
INFO:root:这是一个info消息
WARNING:root:这是一个warning消息
ERROR:root:这是一个error消息
CRITICAL:root:这是一个critical消息

02 日志格式化

可以自定义日志的输出格式,参考:

logging.basicConfig(
    level=logging.DEBUG,
    format="%(asctime)s [%(levelname)s]: %(message)s",
    datefmt="%Y-%m-%d %H:%M:%S"
)

03 输出到文件

默认情况下,日志输出到控制台。如果你想把日志输出到文件,可以这样设置:

logging.basicConfig(
    filename='app.log',
    level=logging.DEBUG,
    format="%(asctime)s [%(levelname)s]: %(message)s"
)

04 手搓一个日志装饰器

手写一个装饰器,该装饰器挂在函数上,可以实现打印函数的输入与输出。
下面是参考代码:

import logging
from functools import wraps

# 定义日志级别和格式化
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S'
)


def return_log(func):
    """用于输出打印函数的返回值"""
    @wraps(func)
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        logging.info(f"func <{
      
      func.__name__}> return: {
      
      result}")
        return result
    return wrapper


def args_log(func):
    """用于输出打印函数的传入参数"""
    @wraps(func)
    def wrapper(*args, **kwargs):
        logging.info(f"func <{
      
      func.__name__}> args: {
      
      args}, kwargs: {
      
      kwargs}")
        return func(*args, **kwargs)
    return wrapper

猜你喜欢

转载自blog.csdn.net/xuzhongyi103/article/details/132518107
今日推荐