Sunday, May 30, 2021

Django log

Use 2 logger patterns: django and django.db.backends.
Need to make sure to add 'propagte': False to django.db.backends
Otherwise, the db log will show twice.


# Separate DB SQL log from django log
LOGGING = {
    'version': 1,
    'filters': {
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        }
    },
    'handlers': {
        'db_handler': {
            'level': 'DEBUG',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'db_format'
        },
        'log_handler': {
            'level': 'DEBUG',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'log_format'
        }
    },
    'loggers': {
        'django': {
            'handlers': ['log_handler'],
            'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
        },
        'django.db.backends': {
            'level': 'DEBUG',
            'handlers': ['db_handler'],
            'propagate': False
        },
    },
    'formatters': {
        'db_format': {
            'format': 'sql> %(message)s'
        },
        'log_format': {
            'format': 'django> %(message)s'
        }
    }
}


In a api request, the console show logs like this:


Django version 3.2.3, using settings 'bookstore_openapi.settings'
Starting development server at http://0.0.0.0:8001/
Quit the server with CTRL-BREAK.
sql> (0.000) SELECT "book_book"."id", "book_book"."title", "book_book"."category_id", "book_book"."publisher_id", "book_book"."author_id" FROM "book_book" WHERE "book_book"."id" = 1 LIMIT 21; args=(1,)
django> "GET /api/books/1 HTTP/1.1" 200 72

 

 

 

No comments: