I am working on implementing logging within my Python project and have hit a bit of a snag. I am trying to set up my logging such that the Handlers, and Formatters are all organized into a configuration file. What I am trying to do at the moment is to set up my fileHandler such that it will create a log file that looks something like this: YYYY_MM_DD.log obviously with the Y's representing the year, M's representing the month, and D's representing the day.
This is what I have attempted with my config file:
[loggers] keys=root,MainLogger [handlers] keys=fileHandler, consoleHandler [formatters] keys=logFormatter, consoleFormatter [logger_root] level=DEBUG handlers=fileHandler [logger_MainLogger] level=DEBUG handlers=fileHandler, consoleHandler qualname=MainLogger propagate=0 [handler_consoleHandler] class=StreamHandler level=DEBUG formatter=consoleFormatter args=(sys.stdout,) [handler_fileHandler] class=FileHandler level=DEBUG formatter=logFormatter args=(datetime.now().strftime('%Y_%m_%d.log'), 'a') [formatter_logFormatter] format=%(asctime)s | %(levelname)-8s | %(lineno)04d | %(message)s [formatter_consoleFormatter] format=%(asctime)s | %(levelname)-8s | %(fillname)s-%(funcName)s-%(lineno)04d | %message)s The file I am using to test the configuration is pretty simple:
import logging import logging.config logging.config.fileConfig('logging.conf') logger = logging.getLogger('MainLogger') logger.debug("TEST") The specific error I am getting at the moment is:
configparser.InterpolationSyntaxError: '%' must be followed by '%' or '(', found: "%Y_%m_%d.log'), 'a')" I've tried changing the %Y, %m, and %d as the error says, but that doesn't fix the problem. How do I go about setting up the config file so that my log files look the way I want them to?
I should note when I change the filename to test.log everything worked fine, so this is the only error I seem to be having with this.
datetime.now()instead ofdatetime.datetime.now().datetime.datetime.now()and still got the same error. Would I be importing it in my Python script?from datetime import datetimeat the top of your script.logging.conffile is just text. That's why I am asking if anyone knows a way to in the configuration file set the Date as the file name. Or is this a case where instead of using a configuration file I should be hard coding it in the script?