You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Django runserver启动时的时间显示格式?

修改Django Runserver日志时间格式为12小时制

好问题!要把Django开发服务器(python manage.py runserver)的日志时间从January 02, 2018 - 15:35:17(24小时制)改成January 02, 2018 - 3:35:17pm(12小时制、小写时段标识),你可以通过自定义日志配置来实现,步骤如下:

步骤1:编辑项目的settings.py文件

打开项目根目录下的settings.py,找到或添加LOGGING配置块。如果文件里原本没有LOGGING,直接新增下面的配置即可。

步骤2:配置自定义日志格式与处理器

将以下代码添加到settings.py中:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    # 定义自定义格式器
    'formatters': {
        '12_hour_time': {
            # 日志整体格式,保留时间、级别和消息
            'format': '%(asctime)s - %(levelname)s %(message)s',
            # 自定义时间格式:月份全称 + 日期 + 年份 + 12小时制时间(无前导零)+ 小写时段
            # 注意:`%-I` 和 `%P` 是GNU strftime扩展,Windows系统可能不支持,详见下方说明
            'datefmt': '%B %d, %Y - %-I:%M:%S%P'
        },
    },
    # 配置处理器,使用自定义格式器
    'handlers': {
        'django.server': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': '12_hour_time',
        },
    },
    # 为django.server日志器绑定自定义处理器
    'loggers': {
        'django.server': {
            'handlers': ['django.server'],
            'level': 'INFO',
            'propagate': False,
        },
    }
}

关键格式符说明

  • %B:月份的完整名称(如January)
  • %d:两位数字的日期(如02)
  • %Y:四位数字的年份(如2018)
  • %-I:12小时制的小时数,去掉前导零(如3而非03)
  • %M:两位数字的分钟(如35)
  • %S:两位数字的秒数(如17)
  • %P:小写的时段标识(am/pm)

兼容Windows系统的替代方案

如果你的开发环境是Windows,%-I和%P可能无法正常工作,此时可以改用以下方法:

  1. 先在settings.py顶部定义一个自定义日志过滤器:
import logging
import datetime

class CustomTimeFilter(logging.Filter):
    def filter(self, record):
        # 自定义时间格式,将日志生成时间转为本地时间并格式化
        local_time = datetime.datetime.fromtimestamp(record.created)
        # 处理小时无前导零,时段转小写
        hour_part = local_time.strftime('%I').lstrip('0')
        time_str = f"{local_time.strftime('%B %d, %Y - ')}{hour_part}{local_time.strftime(':%M:%S')}{local_time.strftime('%p').lower()}"
        record.asctime = time_str
        return True
  1. 在LOGGING配置中添加这个过滤器:
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'custom_time': {
            '()': CustomTimeFilter,
        },
    },
    'formatters': {
        'simple': {
            'format': '%(asctime)s - %(levelname)s %(message)s',
        },
    },
    'handlers': {
        'django.server': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'simple',
            'filters': ['custom_time'],
        },
    },
    'loggers': {
        'django.server': {
            'handlers': ['django.server'],
            'level': 'INFO',
            'propagate': False,
        },
    }
}

这个方法通过自定义过滤器直接修改日志记录的时间字段,确保在所有平台都能得到January 02, 2018 - 3:35:17pm的格式。

验证修改

保存settings.py后,重新运行python manage.py runserver,你就能看到日志时间已经变成想要的12小时制格式啦!

内容的提问来源于stack exchange,提问作者Md. Mizanur Rahman Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:57:20