Я написал специальный адаптер, чтобы передать дополнительную ценность моей регистрации в основном классе кода на python
Поэтому я хочу, чтобы дополнительное поле, добавленное в мой регистратор, было доступно во всех модулях без повторной записи пользовательского адаптера для каждой функции, а также я хочу, чтобы дополнительная переменная печаталась после INFO в моем журнале
Я использую конфигурацию регистрации json и загружаю ее в основной класс
JSON config:
{
"version": 1,
"disable_existing_loggers": false,
"formatters": {
"standard": {
"format": "%(asctime)s [%(levelname)s] %(funcName)s: %(message)s"
}
},
"handlers": {
"console": {
"level":"DEBUG",
"class":"logging.StreamHandler",
"formatter": "standard",
"stream": "ext://sys.stdout"
},
"info_file": {
"class": "logging.handlers.RotatingFileHandler",
"level": "INFO",
"formatter": "standard",
"filename": "info.log",
"maxBytes": 10485760,
"backupCount": 15,
"encoding": "utf8"
},
"error_file": {
"class": "logging.handlers.RotatingFileHandler",
"level": "ERROR",
"formatter": "standard",
"filename": "error.log",
"maxBytes": 10485760,
"backupCount": 20,
"encoding": "utf8"
}
},
"root": {
"handlers": [ "info_file"],
"level": "DEBUG"
}
}
основной класс:
if __name__ == "__main__":
logger = logging.getLogger(__name__)
with open(base_dir_path+'logging_conf.json', 'r') as logging_configuration_file:
config_dict = json.load(logging_configuration_file)
logging.config.dictConfig(config_dict)
и создание CustomAdapter путем импорта из другого модуля
class CustomAdapter(logging.LoggerAdapter):
def process(self, msg, kwargs):
# use log_context from kwargs or the default given on instantiation
log_context = kwargs.pop('log_context', self.extra['log_context'])
return '[%s] %s' % (log_context, msg), kwargs
log_id = '123'
extra = {'log_context': log_id}
logger = CustomAdapter(logger, extra)
logger.info(log_id)
и для каждой функции в разных модулях я передаю идентификатор журнала и вызываю CustomAdapter
def somemethod(log_id)
logger = logging.getLogger(__name__)
logger = CustomAdapter(logger, extra= {'log_context': log_id})
вывод логгера:
2019-01-08 23:57:23,901 [INFO] check_for_last_run_in_job_control: [123] Executing query to check if last run is INPROGRESS
Выходные данные регистратора исключены:
2019-01-08 23:57:23,901 [INFO] [123] check_for_last_run_in_job_control: Executing query to check if last run is INPROGRESS
1.Таким образом, для каждого метода, который я передаю в журнал и импортирую CustomAdapter, можем ли мы сделать его доступным для всех модулей с передачей каждой функции
- А также я ожидаю, что мой файл регистратора будет отображаться после INFO