Django项目配置日志

需求

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

系统日志

使用Django自带的配置,可以自动记录Django的系统日志。

可以使用logging模块来配置。下面是一个完整的示例代码,展示了如何在Djangosettings.py文件中配置日志记录。

确保在INSTALLED_APPS中包含了logging.config

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

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

python 复制代码
# 添加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的官方文档

实测结果

控制台输出
cmd 复制代码
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
文件输出
cmd 复制代码
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

自定义日志

自定义一个类。

自定义类

python 复制代码
import logging
from logging.handlers import RotatingFileHandler


class 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中的name
        super().__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)
            # 添加handler
            self.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中实例化

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

实测结果

相关推荐
hanxiuchao1 天前
告别客户端臃肿!网页端 M3U8 播放调试方案,适配全办公场景
运维·python·django·m3u8·m3u8播放
程序员羽痕1 天前
基于深度学习的眼疾识别系统
人工智能·pytorch·深度学习·分类·django
流云鹤2 天前
1. 配置环境、创建导航栏
python·django
流云鹤2 天前
2.登录模块
python·django
流云鹤2 天前
专题栏说明
python·django
XGeFei3 天前
【Django学习笔记】—— Django 高并发通俗讲解
笔记·学习·django
weixin_BYSJ19873 天前
springboot美食食谱小程序---附源码24044
java·spring boot·python·spring cloud·django·tomcat·php
许彰午4 天前
87_Python Django模型与数据库
数据库·python·django
weixin_BYSJ19875 天前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
Database_Cool_6 天前
RAG 混合检索首选:阿里云 Lindorm 向量+全文一体化检索
数据库·阿里云·django·云计算