Trying to use a logging configuration file to implement TimedRotatinigFileHandler
.
Just won't take the config file for some reason.
Any suggestions appreciated.
x.py:
import logging import logging.config import logging.handlers logging.config.fileConfig("x.ini") MyLog = logging.getLogger('x') MyLog.debug('Starting')
x.ini:
[loggers] keys=root [logger_root] level=NOTSET handlers=trfhand [handlers] keys=trfhand [handler_trfhand] class=handlers.TimedRotatingFileHandler when=M interval=1 backupCount=11 formatter=generic level=DEBUG args=('/var/log/x.log',) [formatters] keys=generic [formatter_generic] class=logging.Formatter format=%(asctime)s %(levelname)s %(message)s datefmt=
Traceback (most recent call last): File "x.py", line 5, in ? logging.config.fileConfig("x.ini") File "/usr/lib/python2.4/logging/config.py", line 76, in fileConfig flist = cp.get("formatters", "keys") File "/usr/lib/python2.4/ConfigParser.py", line 511, in get raise NoSectionError(section) ConfigParser.NoSectionError: No section: 'formatters'
Thanks
The error message is strictly accurate but misleading.
The reason the "formatters" section is missing, is because the logging module can't find the file you passed to logging.config.fileConfig
.
Try using an absolute file path.
Yes, @ekhumoro was right. It seems that logging
expects an absolute path. Python team should change this error message to something more readable; it just cannot see my file, not because the config file itself is wrong.
I managed to solve this by defining a BASE_DIR
variable in a config file and import it as the prefix of the path, just as Django does. And, remember to create the log file's parent dir(s) if they are not created.
I define the path and the logger in config.py
:
import os BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) import logging import logging.config logging.config.fileConfig(os.path.join(BASE_DIR, 'utils', 'logger.conf')) # the `logger.conf` locates under 'myproject/utils/' logger = logging.getLogger("mylog") # 'mylog' should exist in `logger.conf` in the logger part
In other modules:
from config import logger ... logger.info("Your loggings modules should work now!! - WesternGun")
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