I'm trying to setup logging for my web server using fileConfig, but I'm getting the following error on setup:
File "/home/my/project/server.py", line 32, in <module>
fileConfig(fname='logging.conf')
File "/usr/lib/python3.7/logging/config.py", line 79, in fileConfig
handlers = _install_handlers(cp, formatters)
File "/usr/lib/python3.7/logging/config.py", line 145, in _install_handlers
h = klass(*args, **kwargs)
TypeError: __init__() missing 1 required positional argument: 'filename'
Here's my logging.conf file:
[loggers]
keys=dev,prod
[handlers]
keys=consoleHandler,fileHandler
[formatters]
keys=full,simple
[logger_prod]
level=INFO
handlers=fileHandler
qualname=prod
[logger_dev]
level=DEBUG
handlers=consoleHandler
qualname=dev
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=full
args=(sys.stdout,)
[handler_fileHandler]
class=handlers.RotatingFileHandler
formatter=full
filename='logs/server.log'
maxBytes=1500
backupCount=20
[formatter_full]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
[formatter_simple]
format=%(asctime)s - %(message)s
...and here's my initialization:
fileConfig(fname='logging.conf')
if os.getenv('FLASK_ENV') == 'development':
app.logger = logging.getLogger('dev')
else:
app.logger = logging.getLogger('prod')
Just to add... the dev logger works fine, it logs to the console, so it's just the prod logger that's causing the problem.
I've also tried replacing the filename, maxBytes and backupCount options with args('logs/server.log','a',1500,20) like I've seen in some examples but with that I get this error:
File "/home/my/project/server.py", line 32, in <module>
fileConfig(fname='logging.conf')
File "/usr/lib/python3.7/logging/config.py", line 69, in fileConfig
cp.read(fname)
File "/usr/lib/python3.7/configparser.py", line 696, in read
self._read(fp, filename)
File "/usr/lib/python3.7/configparser.py", line 1110, in _read
raise e
configparser.ParsingError: Source contains parsing errors: 'logging.conf'
[line 30]: "args('logs/server.log','a',1500,20)\n"