烧瓶日志 - 无法写入文件 [英] Flask logging - Cannot get it to write to a file

查看:143
本文介绍了烧瓶日志 - 无法写入文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  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)
$ b app.run(host ='0.0.0.0')

会发生什么事情?


  1. error.log



  2. 尽管没有添加StreamHandler并将调试设置为false,但仍然将所有内容都设置为标准输出(可能是正确,但似乎很奇怪)

我完全离开这里或发生了什么?
<为什么不这样做:

  if __name__ = ='__main__':
init_db()#或任何你需要做的事

impo rt logging
logging.basicConfig(filename ='error.log',level = logging.DEBUG)

app.run(host =0.0.0.0)

如果您现在启动应用程序,您将看到error.log包含:

  INFO:werkzeug:*在http://0.0.0.0:5000/ 
上运行

有关更多信息,请访问 http://docs.python.org/2 / howto / logging.html



好的,因为你坚持说我不能给你看两个处理程序,所以我会添加一个例子这很清楚。首先,将这个日志代码添加到你的main:

  import logging,logging.config,yaml 
logging.config。 dictConfig(yaml.load(open('logging.conf')))



现在也添加一些调试代码,以便我们看到我们的安装程序工作:

$ pre $ log $ logLogger('file')
logconsole = logging.getLogger('console')
logfile.debug(Debug FILE)
logconsole.debug(Debug CONSOLE)

剩下的就是logging.conf程序。让我们使用:

 版本:1 
格式化程序:
hiformat:
format:' HI%(asctime)s - %(name)s - %(levelname)s - %(message)s'
simple:
格式:'%(asctime)s - %(name)s - %(levelname)s - %(message)s'
处理程序:
控制台:$ b $ class:logging.StreamHandler
级别:DEBUG
格式化程序: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
处理程序:[file]
propagate:no
root:
level:DEBUG
处理程序:[console,file]

这个配置比需要的更复杂,但它也显示了日志记录模块的一些功能。



现在,当我们运行我们的应用程序时,我们看到这个输出(w erkzeug-和console-logger):

  HI 2013-07-22 16:36:13,475  -  console  -  DEBUG  - 调试控制台
HI 2013-07-22 16:36:13,477 - werkzeug - INFO - *在http://0.0.0.0:5000/
上运行

另请注意,使用了带HI的自定义格式化程序。



现在看一下errors.log文件。它包含:

 2013-07-22 16:36:13,475  - 文件 -  DEBUG  - 调试文件
2013- 07-22 16:36:13,477 - werkzeug - INFO - *在http://0.0.0.0:5000/
上运行


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')

What happens is

  1. error.log gets created
  2. Nothing is ever written to it
  3. Despite not adding a StreamHandler and setting debug to false I still get everything to STDOUT (this might be correct, but still seems weird)

Am I totally off here somewhere or what is happening?

解决方案

Why not do it like this:

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")

If you now start you application, you'll see that error.log contains:

INFO:werkzeug: * Running on http://0.0.0.0:5000/

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")

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.

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/

Also note that the custom formatter with the "HI" was used.

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/

这篇关于烧瓶日志 - 无法写入文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆