Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python logging error from fileConfig setup

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"
like image 963
RTF Avatar asked May 26 '26 01:05

RTF


1 Answers

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.

like image 121
Nikolaos Chatzis Avatar answered May 27 '26 15:05

Nikolaos Chatzis



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!