来自 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
中将 handler
和 logger
级别都更改为 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'],
},
}
}
我的 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
中将 handler
和 logger
级别都更改为 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'],
},
}
}