我正在尝试使用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
替换maxBytes
,backupCount
和args('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"
答案 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