如何修改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可能无法正常工作,此时可以改用以下方法:
- 先在
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
- 在
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
相关产品推荐
相关产品推荐

