0

I have a custom formatter defined in my log_conf.py.

# log_conf.py class Custom(jsonlogger.JsonFormatter): def add_fields(self, log_record, record, message_dict): super().add_fields(log_record, record, message_dict) log_record["new_field"] = log_record["levelname"] logging.config.fileConfig(file_path) def get_logger(name): return logging.getLogger(name) 

In my logger.ini file I reference it like this:

.... [formatter_json] class = log_conf.Custom 

If I throw my log_conf.py and logger.ini in the same module that is using it this works:

from my_project.my_module import log_conf log = log_conf.get_logger(__name__) 

But I want to put it in a different folder like this:

my_project main.py my_module/ stuff.py myconf/ logger.ini log_conf.py 

If I use this structure and do from my_project.myconf import log_conf I get ModuleNotFoundError: No module named 'log_conf'.

If I change the ini file to class = myconf.log_conf.Custom it still can't find it.

If I change it to class = my_project.myconf.log_conf.Custom I get AttributeError: cannot access submodule 'log_config' of module 'my_project.myconf' (most likely due to a circular import).

Why does it work when they are in the module's dir and throw circular import when using the full namespace of the Custom class for class=?

2
  • import my_project.myconf.log_conf? Commented Jan 18, 2024 at 22:36
  • I'm confused about what your suggesting, I'm already doing from my_project.myconf import log_conf if I do something like import my_project.myconf.log_conf as conf I get the same circular import error. Commented Jan 19, 2024 at 14:35

1 Answer 1

0

Realized the problem was having my custom class defined in the same file that was loading the config duh.

If the file that is calling logging.config.fileConfig("logging_ini_file") includes the class the ini file is pointing to ie: class = myproj.mymodule.file_that_loaded_this_ini_with_fileConfig.CustomThing you get a circular import because fileConfig() is trying to re-import the file that called it.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.