0

I wrote MyClass which i'm using inside of DRF ViewSet "create" method. In this class i declared new logger with _set_logger method. The problem is that django duplicates MyClass logs, which I don't want:

MyClass _set_logger method:

import logging

class MyClass:
    def _set_logger(self) -> None:
        self.log = logging.getLogger('logger_name')
        sh = logging.StreamHandler()
        sh.setLevel(logging.ERROR)
        formatter = logging.Formatter(
            "%(name)s | %(levelname)s | %(funcName)s | %(message)s"
        )
        sh.setFormatter(formatter)
        self.log.addHandler(sh)

The way i'm using MyClass in ViewSet "create" method:

class SomeViewSet(ModelViewSet):
    def create(self, request, *args, **kwargs):
        obj = MyClass()
        obj.do_something(request)
        return super().create(request, *args, **kwargs)

Logs:

# my logs
logger_name | funcName | CRITICAL | error_msg
# django logs
CRITICAL 2023-08-17 00:10:44,138 module_name 11 140294782023360 error_msg

I tried changing logger_name to __name__ , expecting django and MyClass to use the same logger, but that didn't happen.

class MyClass:
    def _set_logger(self) -> None:
        self.log = logging.getLogger(__name__)

0 Answers0