logging库使用教程

logging日志模块

logging是python常用的日志模块,logging涉及三个概念:

  • logger可以理解为记者,决定写什么
  • handler可以理解为发布渠道,决定发到哪里
  • formatter可以理解为文章格式,决定排版格式
  • Level可以理解为重要程度,决定哪些日志的要记录

导入语句

import logging
from functools import wraps

获取日志记录器

logger=logging.getLogger(__name__) # 获取记录器
logger.setLevel(logging.DEBUG) # 设置日志级别

添加控制台处理器

handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)

设置日志格式

formatter = logging.Formatter('%(asctime)s - %(name)s - [%(levelname)s]: %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)

建议demo1

import logging
from functools import wraps
logger=logging.getLogger(__name__) # 获取记录器
logger.setLevel(logging.DEBUG) # 设置日志级别
handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - [%(levelname)s]: %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
print('hello')
def happy(func):
    @wraps(func)
    def wrapper():
        logger.info("this is a log system")
        func()

    return wrapper    

@happy
def hi():
    print('name')

hi()
print(hi.__name__) # 输出的是hi

建议demo2

import logging
import logging.config

LOGGING_CONFIG = {
    'version': 1,
    'disable_existing_loggers': False,

    'formatters': {
        'detailed': {
            'format': '%(asctime)s - %(name)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s'
        },
        'simple': {
            'format': '%(levelname)s - %(message)s'
        }
    },

    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'level': 'INFO',
            'formatter': 'simple',
            'stream': 'ext://sys.stdout'
        },
        'file': {
            'class': 'logging.FileHandler',
            'level': 'DEBUG',
            'formatter': 'detailed',
            'filename': 'app_debug.log',
            'mode': 'a'
        },
        'error_file': {
            'class': 'logging.FileHandler',
            'level': 'WARNING',
            'formatter': 'detailed',
            'filename': 'app_error.log',
            'mode': 'a'
        }
    },

    'loggers': {
        '': {  # 根日志器
            'level': 'DEBUG',
            'handlers': ['console', 'file', 'error_file']
        },
        'database': {
            'level': 'INFO',
            'handlers': ['console'],
            'propagate': False  # 不传递给根日志器
        }
    }
}

# 使用配置
logging.config.dictConfig(LOGGING_CONFIG)
logger = logging.getLogger(__name__)  # 获取当前模块的日志器
posted @ 2026-01-21 23:44  LemHou  阅读(0)  评论(0)    收藏  举报