#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")
.....