当前位置: 首页 > news >正文

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

一、项目结构

study_flask

        --| apps/

                --| __init__.py

        --| base/

                --| logger.py

                --| __init__.py

        --| app.py

二、配置日志功能

1、base/logger.py

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, #保留旧文件数0interval=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_appcurrent_app.logger.error('手动写日志时')

2、apps/__init__.py

from base.loggers import getLogHanderTime,getLogHandlerFile
import logging
from flask import Flaskdef 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、在视图中使用

from flask import current_app
current_app.logger.error('手动写日志时')

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

四、日志文件

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

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

http://www.lryc.cn/news/126658.html

相关文章:

  • 每天一道leetcode:1192. 查找集群内的关键连接(图论困难tarjan算法)
  • 解决Windows系统远程登陆后vscdoe无法输入字符,键盘没有反应,鼠标可以点击,没有反应
  • axios同一个接口,同时接收 文件 或者 数据
  • 【腾讯云 TDSQL-C Serverless产品体验】抓取processon热门模版的标题生成词云
  • 算法通关村第九关 | 二叉树查找和搜索树原理
  • jenkins gitlab 安装
  • Vue2(组件开发)
  • (二)结构型模式:8、代理模式(Proxy Pattern)(C++示例)
  • 代码审计-ASP.NET项目-未授权访问漏洞
  • 爬虫逆向实战(十四)--某培训平台登录
  • GT Code - 图译算法编辑器(集成QT、C++、C、Linux、Git、java、web、go、高并发、服务器、分布式、网络编程、云计算、大数据项目)
  • # 快速评估立功科技基于S32K324的TMS方案
  • docker+haror
  • Shell编程——弱数据类型的脚本语言快速入门指南
  • iOS textView支持超链接跳转
  • 大牛分析相机镜头光学中疑难问题
  • xacro机器人模型文件转urdf文件怎么编写launch文件启动gazebo仿真和在rviz2内显示模型
  • 前端图片转base64,并使用canvas对图片进行压缩
  • 电脑键盘打不了字按哪个键恢复?最新分享!
  • ue5读取外部文件
  • 【ARM】Day4 点亮LED灯
  • TiDB基础介绍、应用场景及架构
  • 深入学习前端开发,掌握HTML、CSS、JavaScript等技术
  • python编程小游戏 五子棋,python编程小游戏简单的
  • spring ico容器 spring注入方式 spring与tomcat整合
  • ansible 修改远程主机nginx配置文件
  • EV 录屏修复小工具
  • 蓝牙资讯|中国智能家居前景广阔,蓝牙Mesh照明持续火爆
  • 2023年排行前五的大规模语言模型(LLM)
  • DoIP学习笔记系列:(六)满足AES128-CMAC算法的“安全认证”.dll生成实践