Как я могу использовать экземпляр класса статически?

#python

Вопрос:

 import logging

class Logger:

    @staticmethod
    def set(log_module_name, log_level):
        Log = logging.getLogger(log_module_name)
        Log.setLevel(log_level)

        formatter = logging.Formatter('%(asctime)s.%(msecs)03d %(name)s %(levelname).1s %(message)s',
            "%m-%d %H:%M:%S")

        stream_handler = logging.StreamHandler()
        stream_handler.setFormatter(formatter)
        Log.addHandler(stream_handler)
        
    @staticmethod
    def debug(msg):
        Log.debug(msg)
 

Я хочу использовать вот так:

     Logger.debug("test message")
 

Но у меня есть ошибки:

   File "myfunc.py", line 113, in debug
    Log.debug(msg)
NameError: name 'Log' is not defined
 

Как я могу использовать журнал как статически?

Комментарии:

1. Журнал в настоящее время существует только внутри набора. Может быть, они не должны быть статическими методами?

2. Почему вам нужны эти статические методы?

3. Я хочу создать свою собственную функцию пользовательского журнала.

4. просто используйте методы экземпляра и сделайте его self.log вместо Log (который является локальным только для метода, в котором вы его определяете).

5. logging Модуль имеет средство для получения объектов регистраторов, присутствующих в дереве ведения журнала: getLogger() . Обычно нет необходимости писать собственные классы регистраторов или иметь дополнительные механизмы, чтобы получить правильный регистратор. Смотрите инструкции по ведению журнала для получения подробной информации!

Ответ №1:

Мой коллега решил мою проблему. Простое добавление global решило мой вопрос. Т. Т.

 import logging

class Logger:

    @staticmethod
    def set(log_module_name, log_level):

        global Log

        Log = logging.getLogger(log_module_name)
        Log.setLevel(log_level)

        formatter = logging.Formatter('%(asctime)s.%(msecs)03d %(name)s %(levelname).1s %(message)s',
            "%m-%d %H:%M:%S")
    .....