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"
In you last attempt you have a typo, i.e., a = after args is missing.
The config below "works", i.e., works but will give you another error.
[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
level=INFO
formatter=full
args=('logs/server.log','a',1500,20)
[formatter_full]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
[formatter_simple]
format=%(asctime)s - %(message)s
Now you will get an error because you have not specified what the root logger should do.
See Can I have logging.ini file without root logger? for the error and ways to resolve it.
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