diff --git a/docs/configuration/logging.md b/docs/configuration/logging.md index 33c07d7f9..8fac5469b 100644 --- a/docs/configuration/logging.md +++ b/docs/configuration/logging.md @@ -2,6 +2,7 @@ ### Available Loggers -| Name | Function | -|------------------|----------| -| `netbox.views.*` | Views which handle business logic for the web UI | +| Name | Function | +|----------------------|----------| +| `netbox.views.*` | Views which handle business logic for the web UI | +| `netbox.api.views.*` | Views which handle business logic for the web UI | diff --git a/netbox/utilities/api.py b/netbox/utilities/api.py index 95de2a25d..57b87bccb 100644 --- a/netbox/utilities/api.py +++ b/netbox/utilities/api.py @@ -1,3 +1,4 @@ +import logging from collections import OrderedDict import pytz @@ -294,25 +295,35 @@ class ModelViewSet(_ModelViewSet): return super().get_serializer(*args, **kwargs) def get_serializer_class(self): + logger = logging.getLogger('netbox.api.views.ModelViewSet') # If 'brief' has been passed as a query param, find and return the nested serializer for this model, if one # exists request = self.get_serializer_context()['request'] - if request.query_params.get('brief', False): + if request.query_params.get('brief'): + logger.debug("Request is for 'brief' format; initializing nested serializer") try: - return get_serializer_for_model(self.queryset.model, prefix='Nested') + serializer = get_serializer_for_model(self.queryset.model, prefix='Nested') + logger.debug(f"Using serializer {serializer}") + return serializer except SerializerNotFound: pass # Fall back to the hard-coded serializer class + logger.debug(f"Using serializer {self.serializer_class}") return self.serializer_class def dispatch(self, request, *args, **kwargs): + logger = logging.getLogger('netbox.api.views.ModelViewSet') + try: return super().dispatch(request, *args, **kwargs) except ProtectedError as e: - models = ['{} ({})'.format(o, o._meta) for o in e.protected_objects.all()] + models = [ + '{} ({})'.format(o, o._meta) for o in e.protected_objects.all() + ] msg = 'Unable to delete object. The following dependent objects were found: {}'.format(', '.join(models)) + logger.warning(msg) return self.finalize_response( request, Response({'detail': msg}, status=409),