Django项目配置日志

需求

Django项目中实现控制台输出到日志文件,并且设置固定的大小以及当超过指定大小后覆盖最早的信息。

系统日志

使用Django自带的配置,可以自动记录Django的系统日志。
可以使用logging模块来配置。下面是一个完整的示例代码,展示了如何在Djangosettings.py文件中配置日志记录。
确保在INSTALLED_APPS中包含了logging.config

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',# 配置日志'logging.config',
]

settings.py中添加以下日志配置:

# 添加LOGGING配置
LOGGING = {'version': 1,'disable_existing_loggers': False,'formatters': {'verbose': {'format': '{levelname} {asctime} {module} {lineno} {process:d} {thread:d} {message}','style': '{',},'simple': {'format': '{levelname} {message}','style': '{',},},'handlers': {# 控制台输出'console': {'level': 'DEBUG','class': 'logging.StreamHandler','formatter': 'simple'},# 文件日志输出'file': {'level': 'INFO','class': 'logging.handlers.RotatingFileHandler','filename': os.path.join(BASE_DIR, 'django.log'),'maxBytes': 1024 * 1024 * 5,  # 最大文件大小为5MB'backupCount': 5,  # 保留5个备份文件'formatter': 'verbose'},},'loggers': {'django': {'handlers': ['console', 'file'],'level': 'INFO',},},
}

在这个配置中:
handlers部分定义了两种处理方式:控制台输出和文件输出。文件输出使用了RotatingFileHandler类,它可以限制日志文件的大小,并在达到最大值时自动创建新的日志文件,同时保留一定数量的旧日志文件。
formatters部分定义了日志消息的格式。
loggers部分指定了哪些日志应该被记录,以及它们使用的处理方式和级别。

此配置使得Django能够同时向控制台和指定的日志文件输出信息,日志文件的最大大小被限制为5MB,并且最多保留5个备份文件。当日志文件大小超过设定值时,最早的日志会被新日志覆盖。

formatter

可选择的输出格式见looging的官方文档。

实测结果

控制台输出
INFO "POST /login/ HTTP/1.1" 302 0
INFO:django.server:"POST /login/ HTTP/1.1" 302 0
INFO "GET /index/ HTTP/1.1" 200 5510
INFO:django.server:"GET /index/ HTTP/1.1" 200 5510
文件输出
INFO 2024-09-26 15:36:11,223 basehttp 124 26760 32436 "GET / HTTP/1.1" 200 5510
INFO 2024-09-26 15:36:11,238 basehttp 124 26760 15316 "GET /static/js/bootstrap.min.js HTTP/1.1" 200 37045
INFO 2024-09-26 15:36:11,239 basehttp 124 26760 23132 "GET /static/css/bootstrap.min.css HTTP/1.1" 200 121200
INFO 2024-09-26 15:36:11,239 basehttp 124 26760 23012 "GET /static/js/jquery.min.js HTTP/1.1" 200 84284

自定义日志

自定义一个类。

自定义类

import logging
from logging.handlers import RotatingFileHandlerclass MyLogging(logging.Logger):def __init__(self, name="mylog", level="DEBUG", file=None,fmt="%(asctime)s %(name)s %(filename)s [%(lineno)d] %(levelname)s:%(message)s"):# 直接超继承Logger中的namesuper().__init__(name)# 配置日志级别self.setLevel(level)# 初始化格式formatter = logging.Formatter(fmt)# 初始化处理器# 如果file为空,执行stream_handler, 不空,都执行# 自定义日志写入文件if file:# 创建日志记录器,指明日志保存路径,每个日志文件的最大值,保存的日志文件的个数上限。# file_handler = logging.FileHandler(file)file_handler = RotatingFileHandler(file, maxBytes=1024 * 1024, backupCount=5)# 设置handler级别file_handler.setLevel(level)# 添加handlerself.addHandler(file_handler)# 添加日志处理器file_handler.setFormatter(formatter)# 自定义日志在后台Console中打印stream_handler = logging.StreamHandler()stream_handler.setLevel(level)self.addHandler(stream_handler)stream_handler.setFormatter(formatter)if __name__ == "__main__":logger = MyLogging(file='./log.txt')logger.debug('hello world')logger.info('welcome to use logging')

settings.py中实例化

from static.utils.my_logging import MyLogging
# 启用日志文件
logger = MyLogging(file=os.path.join(BASE_DIR, 'sys_log.txt'))

实测结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/54923.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xxl-job 适配达梦数据库

前言 在数字化转型的浪潮中,任务调度成为了后端服务不可或缺的一部分。XXL-JOB 是一个轻量级、分布式的任务调度框架,广泛应用于各种业务场景。达梦数据库(DM),作为一款国内领先的数据库产品,已经被越来越…

Redis篇(应用案例 - 商户查询缓存)

目录 一、什么是缓存? 二、为什么要使用缓存 三、如何使用缓存 四、添加商户缓存 1. 缓存模型和思路 2. 代码如下 五、缓存更新策略 1. 内存淘汰 2. 超时剔除 3. 主动更新 六、数据库缓存不一致解决方案 1. 数据库缓存不一致解决方案 2. 数据库和缓存不一致采用什…

AMD ROCm™ 安装指南

AMD ROCm™ installation — ROCm Blogs 注意: 本文之前是 AMD 实验笔记博客系列的一部分。 AMD ROCm™ 是第一个面向 HPC/超大规模级 GPU 计算的开源软件开发平台。AMD ROCm™ 将 UNIX 的选择权、极简主义和模块化软件开发哲学引入 GPU 计算领域。有关更多信息,请参…

搜索引擎简介

搜索引擎架构 整个搜索引擎分为三个系统 爬虫系统 索引系统 线上搜素服务 爬虫系统 爬虫分为两个阶段: 第一阶段:根据目标网站的列表页,爬对应的文档 URL 第二阶段:根据文档 URL,下载文档内容 触发器&#xff1…

【行业报告】AI大模型对我国劳动力市场潜在影响研究报告(2024),附PDF下载!!

前言 9月13日,北京大学国家发展研究院联合智联招聘在中国国际服务贸易交易会上发布的《AI大模型对我国劳动力市场潜在影响研究:2024》(以下简称“报告”)显示,2024年上半年,招聘职位数同比增速前五的人工智…

数据结构——二叉树的性质和存储结构

二叉树的抽象类型定义 基本操作: CreateBiTree(&T,definition) 初始条件:definition给出二叉树T的定义。 操作结果:按definition构造二叉树T。 PreOrderTraverse(T) 初始条件:二叉树T存在。 操作结果:先序遍历T,对每个结…

基于Hive和Hadoop的白酒分析系统

本项目是一个基于大数据技术的白酒分析系统,旨在为用户提供全面的白酒市场信息和深入的价格分析。系统采用 Hadoop 平台进行大规模数据存储和处理,利用 MapReduce 进行数据分析和处理,通过 Sqoop 实现数据的导入导出,以 Spark 为核…

Java五子棋

目录 一:案例要求: 二:代码: 三:结果: 一:案例要求: 实现一个控制台下五子棋的程序。用一个二维数组模拟一个15*15路的五子棋棋盘,把每个元素赋值位“┼”可以画出棋…

通过OpenScada在ARMxy边缘计算网关上实现数字化转型

随着工业4.0概念的普及,数字化转型已成为制造业升级的关键路径之一。在此背景下,边缘计算技术因其能够有效处理大量数据、减少延迟并提高系统响应速度而受到广泛关注。ARMxy边缘计算网关,特别是BL340系列,凭借其强大的性能和灵活的…

SQL高可用优化-优化SQL中distinct和Where条件对索引字段进行非空检查语句

最近做一个需求,关于SQL高可用优化,需要优化项目中的SQL,提升查询效率。 SQL高可用优化 一、优化SQL包含distinct场景二、优化SQL中Where条件中索引字段是否为NULL三、代码验证1. NodeMapper2. NodeService3. NodeController4.数据库数据5.项…

SPI总结

1.前言 1.1 SPI简介 SPI全称Serial Peripheral Interface,串行外设接口,是一种用于连接外设的全双工通信总线。主机和从机支持一对一或一对多通讯连接。 图1 SPI物理层通讯连接 表1 Signal description 1.2 SPI特征 串行,每个时钟周期只传…

每日论文6—16ISCAS一种新型低电流失配和变化电流转向电荷泵

《A Novel Current Steering Charge Pump with Low Current Mismatch and Variation》16ISCAS 本文首先介绍了传统的current steering charge pump,如下图: 比起最简单的电荷泵,主要好处是UP和DN开关离输出节点较远,因此一定程度…

echarts 导出pdf空白原因

问题阐述 页面样式: 导出pdf: 导出pdf,统计图部分为空白。 问题原因 由于代码中进行了dom字符串的复制,而echarts用canvas绘制,canvas内部内容不会进行复制,只会复制canvas节点,因此导出pdf空白。 解决…

C语言VS实用调试技巧

文章目录 一、什么是bug?二、什么是调试?三、Debug和Release四、VS调试快捷键4.1环境准备4.2调试快捷键 五、监视和内存观察5.1监视5.2内存 六、调试举例七、编程常见错误归类7.1编译型错误7.2链接型错误7.3运行时错误 一、什么是bug? 🍎bug本意是 “…

【珠海一号卫星】

珠海一号卫星 珠海一号卫星星座是由珠海欧比特宇航科技股份有限公司发射并运营的商业遥感微纳卫星星座,是中国首家由民营上市公司建设并运营的卫星星座。以下是对珠海一号卫星的详细介绍: 一、基本概况 组成:整个星座由34颗卫星组成&…

Solidity——抽象合约和接口详解

🚀本系列文章为个人学习笔记,目的是巩固知识并记录我的学习过程及理解。文笔和排版可能拙劣,望见谅。 Solidity中的抽象合约和接口详解 目录 什么是抽象合约?抽象合约的语法接口(Interface)的定义接口的语…

通过 OBD Demo 体验 OceanBase 4.3 社区版

本文作者:马顺华 引言 OceanBase 4.3 是一个专为实时分析 AP 业务设计的重大更新版本。它基于LSM-Tree架构,引入了列存引擎,实现了行存与列存数据存储的无缝整合。这一版本不仅显著提升了AP场景的查询性能,同时也确保了TP业务场景…

uniapp云打包

ios打包 没有mac电脑,使用香蕉云编 先登录香蕉云编这个工具,新建csr文件——把csr文件下载到你电脑本地: 然后,登录苹果开发者中心 生成p12证书 1、点击+号创建证书 创建证书的时候一定要选择ios distribution app store and ad hoc类型的证书 2、上传刚才从本站生成的…

【设计模式-策略】

定义 策略模式(Strategy Pattern)是一种行为型设计模式,定义了一系列算法,将每个算法封装起来,并使它们可以互相替换。策略模式让算法独立于使用它的客户端而变化,使得算法的变化不会影响到使用它的客户端…

Java读取YAML文件

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…