У меня проблема с объектом журнала с несколькими файлами python. Кто-то может пролить свет на то, как инициализировать файл журнала после всего импорта? Перемещение ниже строки утилиты импорта выдает ошибку ключа.
my_logger.setup_logger ("log_file.txt")
utils.py вызывает my_logger.get_logger () до инициализации объекта регистратора.
Как решить эту проблему?
main.py
#!/usr/bin/python3
import my_logger
# Moving setup_logger below "import utils" causing issue
my_logger.setup_logger("log_file.txt")
import utils
import logging
logger = my_logger.get_logger()
# my_logger.setup_logger("log_file.txt") # <<<<<< This line causing the issue
if __name__ == "__main__":
my_logger.set_log_context("init: ")
logger.info("Start")
utils.init()
my_logger.set_log_context("post init: ")
utils.done()
utils.py
import my_logger
logger = my_logger.get_logger()
def init():
logger.info("Proc init started")
def done():
logger.info("Proc Done.")
my_logger.py
import logging
from logging.handlers import RotatingFileHandler
extra = {'log_context': ''}
def set_log_context(context):
global extra
extra['log_context'] = context
def get_log_context():
global extra
return extra
class Custom_Logger(logging.Logger):
def _log(self, level, msg, args, exc_info=None, extra=None):
if extra is None:
extra=get_log_context()
super(Custom_Logger, self)._log(level, msg, args, exc_info,extra)
def setup_logger(file_name):
FORMAT = "%(log_context)s%(message)s"
logging.basicConfig(level=logging.INFO, format=FORMAT)
logging.setLoggerClass(Custom_Logger)
# logging.setLoggerClass(Custom_Logger)
logger = logging.getLogger("main_logger")
# Log file size set 1 mb
lfh = RotatingFileHandler(file_name, maxBytes=1*1024*1024, backupCount=5)
lfh.setLevel(logging.DEBUG)
lch = logging.StreamHandler()
lch.setLevel(logging.INFO)
info_format = logging.Formatter("%(log_context)s%(message)s")
debug_format = logging.Formatter("[%(filename)s:%(funcName)s:%(lineno)s]"
" %(log_context)s%(message)s")
lfh.setFormatter(debug_format)
lch.setFormatter(info_format)
logger.addHandler(lch)
logger.addHandler(lfh)
def get_logger():
return logging.getLogger("main_logger")
Ошибка:
KeyError: 'log_context'
Call stack:
File "C:/Users/rnaveenk/PycharmProjects/logger_test/main.py", line 16, in <module>
utils.done()
File "C:\Users\rnaveenk\PycharmProjects\logger_test\utils.py", line 7, in done
logger.info("Proc Done.")
Message: 'Proc Done.'
Arguments: ()