Django Logger not logging but all other loggers work

Viewed 653

I have configured my Django application to run in production but I cannot get anything out of the django logger.

The root logger is writing out to file and Azure logging so I can see my elasticsearch and opencensus logs writing fine but nothing is coming out of django.

At the moment I am using INFO level just to see if anything comes out but I'll be adjusting those once I know things are writing out.

DEBUG = False
LOGGING = {
    "disable_existing_loggers": False, 
    "filters": {
        "require_debug_false": {
            '()': 'django.utils.log.RequireDebugFalse',
        },
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'formatters': {
        'simple': {
            'format': '[%(asctime)s] %(levelname)s %(message)s',
        'datefmt': '%Y-%m-%d %H:%M:%S'
        },
        'verbose': {
            'format': '[%(asctime)s] %(levelname)s [%(name)s.%(funcName)s:%(lineno)d] %(message)s',
        'datefmt': '%Y-%m-%d %H:%M:%S'
        },
    },
    "handlers": {
        "file": {
            "class": "logging.FileHandler", 
            "filename": os.path.join(APP_ROOT, 'logs', 'app.log'),
            "level": "INFO",
            "formatter": 'verbose',
            'filters': ['require_debug_false'],
        },
        'console': { # writes to the console
            'class': 'logging.StreamHandler',
            'level': 'INFO',
            'filters': ['require_debug_true'],
            'formatter': 'verbose'
        },
        'azure':{
            'level': 'INFO',
            'filters': ['require_debug_false'],
            'class': 'opencensus.ext.azure.log_exporter.AzureLogHandler',
            'formatter': 'verbose'
        },
    },
    "loggers": {
        'django': {
            'handlers': [
                'azure',
                'file',
                ],
            'level': 'INFO',
        },
        '': {
            'handlers': [
                'azure',
                'file',
               ],
            'level': 'INFO',
        },
    }, 
    "version": 1
}
1 Answers

So, I found the answer was to completely override the default logging and build it from scratch.

Something was happening in the django path I couldn't fathom.

I'd highly recommend this site as it used easier to following descriptions - https://www.webforefront.com/django/setupdjangologging.html

    LOGGING = {
    'disable_existing_loggers': True, #<-- if true then make sure that you have a django and py.warnings logger
    'filters': {
        "require_debug_false": {
            '()': 'django.utils.log.RequireDebugFalse',
        },
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'formatters': {
        'simple': {
            'format': '[%(asctime)s] %(levelname)s %(message)s',
        'datefmt': '%Y-%m-%d %H:%M:%S'
        },
        'verbose': {
            'format': '[%(asctime)s] %(levelname)s [%(name)s.%(funcName)s:%(lineno)d] %(message)s',
        'datefmt': '%Y-%m-%d %H:%M:%S'
        },
        'azure_verbose': {
            'format': '[%(asctime)s] %(levelname)s [%(name)s.%(funcName)s:%(lineno)d] %(message)s traceId=%(traceId)s spanId=%(spanId)s',
        'datefmt': '%Y-%m-%d %H:%M:%S'
        },
    },
    'handlers': {
        'console': { # writes to the console
            'class': 'logging.StreamHandler',
            'level': 'INFO',
            'filters': ['require_debug_true'],
            'formatter': 'verbose'
        },
        'azure':{ # exports to Azure Monitor. Needs OPENCENSUS elements configured
            'level': 'INFO',
            'filters': ['require_debug_false'],
            'class': 'opencensus.ext.azure.log_exporter.AzureLogHandler',
            'formatter': 'azure_verbose'
        },
    }, 
    'loggers': {
        'arches': {
            "handlers": [
                "azure",
                "console",
                ],
        },
        'exporter': { # <-- exporter app logger
            "handlers": [
                "azure",
                "console",
                ],
        },
        'django': { # <-- must have one django 
            'handlers': [
                'azure',
                'console',
                ],
        },
        'py.warnings': { # <-- implement from default
            'handlers': [
                'azure',
                'console',
                ],
        },
        '': { # <-- catchall
            'handlers': [
                'azure',
                'console',
                ],
        },
    }, 
    'version': 1
}
Related