问题描述
好的,这是我设置所有内容的代码:
Ok, here's the code where I setup everything:
if __name__ == '__main__':
app.debug = False
applogger = app.logger
file_handler = FileHandler("error.log")
file_handler.setLevel(logging.DEBUG)
applogger.setLevel(logging.DEBUG)
applogger.addHandler(file_handler)
app.run(host='0.0.0.0')
发生了什么
- error.log 被创建
- 没有写入任何内容
- 尽管没有添加 StreamHandler 并将 debug 设置为 false,我仍然将所有内容都设置为 STDOUT(这可能是正确的,但仍然看起来很奇怪)
我是不是完全离开了这里或发生了什么?
Am I totally off here somewhere or what is happening?
推荐答案
为什么不这样做:
if __name__ == '__main__':
init_db() # or whatever you need to do
import logging
logging.basicConfig(filename='error.log',level=logging.DEBUG)
app.run(host="0.0.0.0")
如果您现在启动应用程序,您将看到 error.log 包含:
If you now start you application, you'll see that error.log contains:
INFO:werkzeug: * Running on http://0.0.0.0:5000/
有关更多信息,请访问 http://docs.python.org/2/howto/logging.html
For more info, visit http://docs.python.org/2/howto/logging.html
好的,因为您坚持认为我向您展示的方法不能有两个处理程序,我将添加一个示例,使这一点非常清楚.首先,将此日志代码添加到您的主要:
Okay, as you insist that you cannot have two handler with the method I showed you, I'll add an example that makes this quite clear. First, add this logging code to your main:
import logging, logging.config, yaml
logging.config.dictConfig(yaml.load(open('logging.conf')))
现在还添加一些调试代码,以便我们看到我们的设置有效:
Now also add some debug code, so that we see that our setup works:
logfile = logging.getLogger('file')
logconsole = logging.getLogger('console')
logfile.debug("Debug FILE")
logconsole.debug("Debug CONSOLE")
剩下的就是logging.conf"程序.让我们使用它:
All what is left is the "logging.conf" program. Let's use that:
version: 1
formatters:
hiformat:
format: 'HI %(asctime)s - %(name)s - %(levelname)s - %(message)s'
simple:
format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
handlers:
console:
class: logging.StreamHandler
level: DEBUG
formatter: hiformat
stream: ext://sys.stdout
file:
class: logging.FileHandler
level: DEBUG
formatter: simple
filename: errors.log
loggers:
console:
level: DEBUG
handlers: [console]
propagate: no
file:
level: DEBUG
handlers: [file]
propagate: no
root:
level: DEBUG
handlers: [console,file]
这个配置比需要的更复杂,但它也显示了日志模块的一些功能.
This config is more complicated than needed, but it also shows some features of the logging module.
现在,当我们运行我们的应用程序时,我们会看到这个输出(werkzeug- 和 console-logger):
Now, when we run our application, we see this output (werkzeug- and console-logger):
HI 2013-07-22 16:36:13,475 - console - DEBUG - Debug CONSOLE
HI 2013-07-22 16:36:13,477 - werkzeug - INFO - * Running on http://0.0.0.0:5000/
另请注意,使用了带有HI"的自定义格式化程序.
Also note that the custom formatter with the "HI" was used.
现在查看errors.log"文件.它包含:
Now look at the "errors.log" file. It contains:
2013-07-22 16:36:13,475 - file - DEBUG - Debug FILE
2013-07-22 16:36:13,477 - werkzeug - INFO - * Running on http://0.0.0.0:5000/
这篇关于Flask 日志记录 - 无法将其写入文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!