从Flask应用程序中的多个模块调用记录器

时间:2015-03-29 03:16:53

标签: python logging flask

这就是我app目前的设置方式:

目录

/xampp/code/menumaster
    menumaster
        __init__.py
        views.py
        sqltables.py

__初始化__。PY

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from sqlalchemy.orm import sessionmaker
from sqlalchemy import *

app = Flask(__name__)
app.debug = True
DBSession = sessionmaker(bind=engine)
import menumaster.views

views.py

from menumaster import app, DBSession
@app.route('/restaurants', methods = ['GET'])
def getRestaurants():
    # Code here...

我想知道我应该在何处以及如何配置logger,这样我就可以在不同的模块中使用它并写入某个文件mylog.txt

我见过这样的例子:https://gist.github.com/ibeex/3257877#file-foo-log

但是,在我的代码中我不使用

if __name__ == '__main__':

我应该在logger文件中添加__init__.py配置代码并从那里尝试调用吗?任何帮助以正确的方式做到这一点将不胜感激。

更新

我的代码目前看起来像这样:

views.py

import logging
import logging.config

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,

    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %    (thread)d %(message)s'
        },
    },
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': 'error.log',
            'formatter': 'verbose',
        },
    },
    'loggers': {
        '': {
            'level': 'WARN',
            'handlers': ['file'],
        },
    }
}   

logging.config.dictConfig(LOGGING)
logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)    
logger = logging.getLogger('__name__')

@app.route('/restaurants', methods = ['GET'])
def getRestaurants():
    logger.debug('write something to log file') 
    return 'something'

我目前有两个问题:

1)文字"write something to log file"未出现在error.log

2)当我从setLevel(logging.INFO)删除logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)时,没有任何内容写入error.log。我认为这可行,因为此信息已在LOGGING变量中设置。

我尝试将handlerlogger级别更改为INFO中的LOGGING,但无济于事。

1 个答案:

答案 0 :(得分:1)

最佳做法是每个Python模块都声明自己的记录器:

 import logging

 logger = logging.getLogger(__name__)

然后,您可以使用标准Python日志记录配置来增加或减少每个模块的日志记录详细程度,并将不同模块的日志输出重定向到不同的日志记录处理程序/文件。

See configuring Python logging

下面是一个简单的日志配置文件,显示了如何设置文件日志记录:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,

    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        },
    },


    'handlers': {


        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': 'logs/django.log',
            'formatter': 'verbose',
        },


    },

    'loggers': {}

        '': {
            'level': 'WARN',
            'handlers': ['file'],
        },

    }
}