Python中如何解决Django日志配置与使用问题

想让 django 输出每次 request POST 过来的 json 数据,LOGGING 应该怎么配置?求大佬解答 0.0
Python中如何解决Django日志配置与使用问题

15 回复

自己手动加一个中间件


在Django里搞日志配置,其实就两步:配settings.py,然后在代码里用。直接上干货。

1. 基础配置(settings.py

# settings.py
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '{levelname} {asctime} {module} {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': '/path/to/your/debug.log',
            'maxBytes': 1024*1024*5,  # 5MB
            'backupCount': 5,
            'formatter': 'verbose',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console', 'file'],
            'level': 'INFO',
            'propagate': True,
        },
        'myapp': {  # 你的应用专用logger
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': False,
        },
    }
}

2. 在代码中使用

# views.py 或任何地方
import logging

# 获取配置中定义的logger
logger = logging.getLogger('myapp')

def my_view(request):
    logger.debug('这是一条debug信息')
    logger.info('用户访问了视图')
    logger.warning('参数可能有问题: %s', request.GET)
    try:
        # 你的业务代码
        result = some_operation()
    except Exception as e:
        logger.error('操作失败', exc_info=True)  # 会自动记录完整堆栈
        return HttpResponseServerError()

关键点:

  • disable_existing_loggers: 设为False,否则Django自带的logger会被禁用
  • propagate: 设为False可以防止日志重复记录
  • exc_info=True: 记录异常时一定要加这个参数,不然看不到堆栈
  • 生产环境记得把DEBUG级别的日志关掉,不然日志文件会暴涨

快速调试: 如果日志没输出,先在视图里加个print(logging.getLogger('myapp').handlers),看看handler有没有正确加载。

总结:配好LOGGING字典,用getLogger拿实例,按级别记录。

https://docs.djangoproject.com/en/2.1/topics/http/middleware/

if request.method==“POST”:
logger.debug(request.body)

跑个题。Django 怎么用 Pycharm 打开 db.sqlite3 数据库文件

找一下 有一个 database 的功能,可以用来连接数据库的

Django 怎么用 Pycharm 打开 db.sqlite3 数据库文件

你这不是跑跑题而是语无论次

哈哈,感谢感谢

问个问题。django 需要 join 多张表的查询数据,怎么写比较合适?

写代码写傻了?戾气。麻烦你 Block me. 我重新组织语言:在 PyCharm 里面的 Django Project 里,请问如何才能打开,并浏览 db.sqlite3 数据库文件?

帮你找了一个 https://www.jianshu.com/p/32556afe548f 希望能帮到你

是该 block 你。你为什么来这里跑题啊!

其实你的问题和 django 根本没有关系好吧,再者你需要把文件和库两个不同概念搞清楚。尽管你努力地重新组织了语言,但还是没有什么轮次。我第一次回复你的那句无论是从你的做法上还是事实上并没有说错,你回复里头一句就说我写代码写傻了?反倒说我戾气。确实要 block 你。

谢谢您!

回到顶部