Flask框架-配置日志(1):flask使用日志

一、项目结构

study_flask

--| apps/

--| init.py

--| base/

--| logger.py

--| init.py

--| app.py

二、配置日志功能

1、base/logger.py

python 复制代码
import os
import logging
from datetime import datetime,date,timedelta
from logging.handlers import RotatingFileHandler, TimedRotatingFileHandler
#项目根目录
BASE_DIR = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
#日志文件存放的目录
LOGS_DIR = os.path.join(BASE_DIR,'logs')
#使用RotatingFileHandler日志处理器,生成的日志文件存放的位置
FILE_LOGS_DIR = os.path.join(LOGS_DIR,'file_handler')
#使用TimedRotatingFileHandler日志处理器,生成的日志文件存放的位置
TIME_LOGS_DIR = os.path.join(LOGS_DIR,'time_handler')

#创建logs目录
if not os.path.exists(LOGS_DIR):
    os.makedirs(LOGS_DIR)
#创建logs/file_handler目录
if not os.path.exists(FILE_LOGS_DIR):
    os.makedirs(FILE_LOGS_DIR)
#创建logs/time_handler目录
if not os.path.exists(TIME_LOGS_DIR):
    os.makedirs(TIME_LOGS_DIR)


#1、基于文件大小切割的日志处理器
def getLogHandlerFile():
    # 文件名,以日期作为文件名
    log_file_name = date.today().strftime('%Y-%m-%d.log')
    # 构建日志文件的路径
    log_file_str = os.path.join(FILE_LOGS_DIR,log_file_name)

    '1、日志记录格式'
    # 默认日志等级的设置
    # logging.basicConfig(level=logging.INFO)
    # 设置日志的格式:发生时间,日志等级,日志信息文件名,      函数名,行数,日志信息
    formatter = logging.Formatter('[%(asctime)s][%(levelname)s][%(pathname)s: %(funcName)s function: %(lineno)s line]: %(message)s')

    '2、基于文件的日志处理器配置'
    # 创建日志记录器,指明日志保存路径,每个日志的大小,保存日志的上限
    file_log_handler = RotatingFileHandler(
        filename=log_file_str,   #日志文件名
        maxBytes=1024 * 1024 * 10,  #文件大小超过10MB后,就会生成一个新的日志文件,日志就写到新的文件中
        backupCount=10,  #最大支持总的日志文件数
        encoding='UTF-8')
    file_log_handler.setFormatter(formatter)  # 设置日志的格式
    file_log_handler.setLevel(logging.INFO)  # 设置日志等级
    return file_log_handler  # 基于文件大小分割日志的方案

#2、基于时间切割的日志处理器
def getLogHanderTime():
    # 文件名,以日期作为文件名
    log_file_name = datetime.today().strftime('%Y-%m-%d-%H-%M.log')
    # 构建日志文件的路径
    log_file_str = os.path.join(TIME_LOGS_DIR, log_file_name)

    '1、日志记录的格式'
    # 默认日志等级的设置
    # logging.basicConfig(level=logging.DEBUG)
    # 设置日志的格式:发生时间,日志等级,日志信息文件名,      函数名,行数,日志信息
    formatter = logging.Formatter('[%(asctime)s][%(levelname)s][%(pathname)s: %(funcName)s function: %(lineno)s line]: %(message)s')

    '2、基于时间的日志处理器'
    '''
    # 往文件里写入指定间隔时间自动生成文件的Handler
    # 实例化TimedRotatingFileHandler
    # interval是时间间隔,backupCount是备份文件的个数,如果超过这个个数,就会自动删除,when是间隔的时间单位,单位有以下几种:
    # S 秒
    # M 分
    # H 小时
    # D 天
    # 'W0'-'W6' 每星期(interval=0时代表星期一:W0)
    # midnight 每天凌晨
    '''
    file_log_time_handler = TimedRotatingFileHandler(
        filename=log_file_str, #日志文件的路径
        when='midnight', #凌晨零点进行文件分割
        backupCount=0, #保留旧文件数0
        interval=1, #分割一次
        encoding='utf-8')  # 日志处理器
    file_log_time_handler.setFormatter(formatter)  # 日志格式
    file_log_time_handler.setLevel(logging.DEBUG)  # 日志等级

    return file_log_time_handler  # 基于文件大小分割日志的方案


if __name__ == '__main__':
    from flask import current_app
    current_app.logger.error('手动写日志时')

2、apps/init.py

python 复制代码
from base.loggers import getLogHanderTime,getLogHandlerFile
import logging
from flask import Flask

def create_app():
    #创建一个flask实例,传递__name__ ,是把当前文路径作为flask实例的根路径
    #static和templates都是创建在该路径下的
    app = Flask(__name__,static_folder='../static',template_folder='../templates') #static目录位置是上层的static
    '基本配置'
    '日志使用'
    app.logger.addHandler(getLogHanderTime())
    app.logger.addHandler(getLogHandlerFile())
    app.logger.setLevel(logging.DEBUG)
    
    return app

三、测试使用

1、在视图中使用

python 复制代码
from flask import current_app
current_app.logger.error('手动写日志时')

2、在视图中抛出一个异常

四、日志文件

基于文件大小分割的日志文件路径: logs/file_handler/年-月-日.log

基于时间间隔分割的日志文件路径:logs/time_handler/年-月-日.log

相关推荐
小江的记录本6 小时前
【JVM虚拟机】垃圾回收GC:四种引用类型:强引用、软引用、弱引用、虚引用(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
小马爱打代码6 小时前
Spring源码 第四篇:Spring 5 源码深度拆解:AOP 全流程核心原理
java·后端·spring
APIshop6 小时前
Python 获取 1688 商品采集 API 接口 | 工厂货源自动化对接商品信息 | 无需选品
运维·python·自动化
deepin_sir6 小时前
10 - 函数
开发语言·python
ServBay7 小时前
2026 Mac 本地大模型部署深度解析与混合架构指南
后端·macos·aigc
charlee447 小时前
《GIS基础原理与技术实践》配套案例(Python版)
python·conda·numpy·gis·环境配置
枫叶林FYL7 小时前
项目十:事件溯源仓储管理系统(WMS)仿真实现
开发语言·python
一拳一个娘娘腔7 小时前
【SRC漏洞挖掘系列】第10期:GraphQL & API 安全 —— 现代 API 的“裸奔”时代
后端·安全·graphql
ZhengEnCi8 小时前
01-如何监听接口调用情况?
java·spring boot·后端
渣渣xiong9 小时前
从零开始:前端转型AI agent直到就业第五十七天-第五十八天
前端·人工智能·python