How can I print the contents of a Python 2.7 ConfigParser
to logging
?
The only solution I can find is to write to a temporary file and read that file back in. Another idea I had was to get a fake "file handle" from the logging utility and pass that to the ConfigParser write method, but I don't know how to get such a handle form logging.
Just use a StringIO object and the configparser's write method. It looks like the only method for "printing" the contents of a config object is ConfigParser. write which takes a file-like object. io.
ConfigParser is a Python class which implements a basic configuration language for Python programs. It provides a structure similar to Microsoft Windows INI files. ConfigParser allows to write Python programs which can be customized by end users easily.
Read and parse one configuration file, given as a file object. Read configuration from a given string. Read configuration from a dictionary. Keys are section names, values are dictionaries with keys and values that should be present in the section.
As this is the top Google search result and I was hoping to find a solution to print the values of the ConfigParser
instance to stdout, here's a one-liner to help all future readers:
print({section: dict(config[section]) for section in config.sections()})
You should be able to create a writable object that writes to the log. Something like this (if you want to keep the string around you could modify the ConfigLogger to save it as well):
import ConfigParser import logging class ConfigLogger(object): def __init__(self, log): self.__log = log def __call__(self, config): self.__log.info("Config:") config.write(self) def write(self, data): # stripping the data makes the output nicer and avoids empty lines line = data.strip() self.__log.info(line) config = ConfigParser.ConfigParser() config.add_section("test") config.set("test", "a", 1) # create the logger and pass it to write logging.basicConfig(filename="test.log", level=logging.INFO) config_logger = ConfigLogger(logging) config_logger(config)
This yields the following output:
INFO:root:Config: INFO:root:[test] INFO:root:a = 1 INFO:root:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With