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'))

实测结果

相关推荐
m0_748232395 分钟前
基于OpenCV和Python的人脸识别系统_django
python·opencv·django
橘猫云计算机设计1 小时前
基于Django的购物商城平台的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
java·数据库·spring boot·后端·django
程序媛徐师姐3 小时前
Python基于Django的酒店推荐系统【附源码】
python·django·酒店·酒店推荐·python django·酒店推荐系统·python酒店推荐系统
web135085886359 小时前
Python大数据可视化:基于python的电影天堂数据可视化_django+hive
python·信息可视化·django
yanglamei196215 小时前
基于Python+Django+Vue的旅游景区推荐系统系统设计与实现源代码+数据库+使用说明
vue.js·python·django
Doker 多克20 小时前
Python Django系列—入门实例
python·django
信阳农夫21 小时前
python 3.6.8支持的Django版本是多少?
python·django·sqlite
2501_904447741 天前
苹果确认iOS 18.4四月初推出:Apple Intelligence将迎来中文支持
华为·智能手机·django·virtualenv·pygame
LCY1331 天前
websocket与django
websocket·django·sqlite
小咕聊编程1 天前
【含文档+PPT+源码】基于Django的新闻推荐系统的设计与实现
后端·python·django