Django not logging to file

Viewed 1373

My Logging configuration is as follows:

LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
    'standard': {
        'format': '%(asctime)s %(levelname)s %(name)s %(message)s'
    },
},
'handlers': {
    'default': {
        'level': 'INFO',
        'class': 'logging.handlers.RotatingFileHandler',
        'filename': '/opt/logs/info.log',
        'maxBytes': 1024*1024*5,  # 5 MB
        'backupCount': 5,
        'formatter': 'standard',
    },
    'request_handler': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': '/opt/logs/request.log',
            'maxBytes': 1024*1024*5,  # 5 MB
            'backupCount': 5,
            'formatter': 'standard',
    },
},
'loggers': {

    ' ': {
        'handlers': ['default'],
        'level': 'INFO',
        'propagate': True
    },
    'django.request': { # Stop SQL debug from logging to main logger
        'handlers': ['request_handler'],
        'level': 'INFO',
        'propagate': False
    },
}
}

In my views, I try to log the following message:

import logging

logger = logging.getLogger(__name__)

class IPGroupDeleteView(generics.DestroyAPIView):
    queryset = IPGroup.objects.get_queryset()
    serializer_class = IPGroupSerializer

    def destroy(self, request, *args, **kwargs):
        try:
            instance = IPGroup.objects.get(id=kwargs['pk'])
        except IPGroup.DoesNotExist:
            logger.info("instance not found")
            return Response(data={"errors": f"IP Group with id {kwargs['pk']} not found"},
                                   status=status.HTTP_404_NOT_FOUND)

In my request.log, the logs get populated for every time a 404 happens as follows:

2018-11-15 12:49:44,616 WARNING django.request Not Found: /api/v1/ip-group/190/delete/
2018-11-15 12:49:57,364 WARNING django.request Not Found: /api/v1/ip-group/190/delete/
2018-11-15 12:54:24,947 WARNING django.request Not Found: /api/v1/ip-group/190/delete/

However, inside info.log, where I hope to see my custom message, nothing is found.What am i doing wrong ?

1 Answers

The root logger you've configured seems to contain a space for the string key. Try an empty string:

'': {  # Use an empty string
    'handlers': ['default'],
    'level': 'INFO',
    'propagate': True
},

Alternatively, you could set the root logger explicitly:

'root': {
    'level': 'INFO',
    'handlers': ['default'],
    'propagate': True
}

That should live at top level of the LOGGING dict (at the same level as loggers, handlers, etc).

Related