[英]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:我正在尝试使用
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'
Here's my logging.conf file:这是我的 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
...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.只是补充一下......
dev
记录器工作正常,它记录到控制台,所以它只是导致问题的prod
记录器。
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:我也试过用
args('logs/server.log','a',1500,20)
替换filename
、 maxBytes
和backupCount
选项,就像我在一些例子中看到的那样,但我得到了这个错误:
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, ie, a =
after args
is missing.在您最后一次尝试中,您有一个错字,即缺少
args
之后的=
。
The config below "works", ie, 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.现在你会得到一个错误,因为你没有指定
root
记录器应该做什么。
See Can I have logging.ini file without root logger?请参阅我可以在没有 root 记录器的情况下使用 logging.ini 文件吗? for the error and ways to resolve it.
对于错误和解决方法。
Your configuration file should look like this:您的配置文件应如下所示:
[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 https://docs.python.org/3/library/logging.config.html#configuration-file-format
Instead反而
[handler_fileHandler]
class=handlers.RotatingFileHandler
formatter=full
filename='logs/server.log'
maxBytes=1500
backupCount=20
Use用
[handler_fileHandler]
class=handlers.RotatingFileHandler
formatter=full
args=('logs/server.log', 'w')
maxBytes=1500
backupCount=20
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.