FileConfig设置中的Python日志记录错误

时间:2020-11-10 12:56:38

标签: python python-logging

我正在尝试使用fileConfig设置Web服务器的日志记录,但是在安装过程中出现以下错误:

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' 

这是我的logging.conf文件:

[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  

...这是我的初始化:

fileConfig(fname='logging.conf')
    
if os.getenv('FLASK_ENV') == 'development':
    app.logger = logging.getLogger('dev')
else:
    app.logger = logging.getLogger('prod')

只需添加... dev记录器即可正常工作,它会记录到控制台,因此仅是prod记录器才引起问题。

我还尝试用filename替换maxBytesbackupCountargs('logs/server.log','a',1500,20)选项,就像在某些示例中看到的那样,但出现此错误:

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"

3 个答案:

答案 0 :(得分:1)

您上次尝试输入错误时,即缺少=之后的args

“有效”下方的配置有效,但会给您另一个错误。

[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

现在,您将收到一个错误消息,因为您尚未指定root记录器应该做什么。

有关错误和解决方法,请参见Can I have logging.ini file without root logger?

答案 1 :(得分:0)

您的配置文件应如下所示:

[loggers]
keys=root,dev,prod

[handlers]
keys=consoleHandler,fileHandler

[formatters]
keys=full,simple

[logger_root]
level=NOTSET
handlers=consoleHandler

[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
args=('logs/server.log', 'w', 1500, 20)

[formatter_full]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s

[formatter_simple]
format=%(asctime)s - %(message)s

https://docs.python.org/3/library/logging.config.html#configuration-file-format

答案 2 :(得分:0)

相反

[handler_fileHandler]  
class=handlers.RotatingFileHandler  
formatter=full  
filename='logs/server.log'  
maxBytes=1500  
backupCount=20

使用

[handler_fileHandler]  
class=handlers.RotatingFileHandler  
formatter=full  
args=('logs/server.log', 'w')
maxBytes=1500  
backupCount=20
相关问题