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

Call logger from multiple modules in Flask app

我的 app 目前是这样设置的:

目录

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

__init__.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__':

我是否应该在我的 __init__.py 文件中添加 logger 配置代码并尝试从那里调用它?如果您能以正确的方式做到这一点,我们将不胜感激。

更新

我的代码目前是这样的:

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) 当我从 logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO) 中删除 setLevel(logging.INFO) 时,没有任何内容写入 error.log。我认为这会起作用,因为此信息已在 LOGGING 变量中设置。

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

最佳做法是每个 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'],
        },

    }
}