Python Flask应用程序中多个模块的呼叫记录器
这是我的Python Flask应用程序中多个模块的呼叫记录器,python,logging,flask,Python,Logging,Flask,这是我的应用程序当前的设置方式: 目录 /xampp/code/menumaster menumaster __init__.py views.py sqltables.py from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy from sqlalchemy.orm import sessionmaker from sqlalchemy import *
应用程序当前的设置方式:
目录
/xampp/code/menumaster
menumaster
__init__.py
views.py
sqltables.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
from menumaster import app, DBSession
@app.route('/restaurants', methods = ['GET'])
def getRestaurants():
# Code here...
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'
\uuuu init\uuuuu.py
/xampp/code/menumaster
menumaster
__init__.py
views.py
sqltables.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
from menumaster import app, DBSession
@app.route('/restaurants', methods = ['GET'])
def getRestaurants():
# Code here...
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'
视图.py
/xampp/code/menumaster
menumaster
__init__.py
views.py
sqltables.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
from menumaster import app, DBSession
@app.route('/restaurants', methods = ['GET'])
def getRestaurants():
# Code here...
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'
我想知道应该在哪里以及如何配置记录器
,以便能够在不同的模块中使用它,并写入一些文件mylog.txt
我见过这样的例子:
但是,在我的代码中,我不使用
if __name__ == '__main__':
我是否应该将记录器
配置代码添加到我的\uuuu init\uuuu.py
文件中,然后从那里尝试调用它?如果您能以正确的方式提供帮助,我们将不胜感激
更新
我的代码当前如下所示:
import logging
logger = logging.getLogger(__name__)
视图.py
/xampp/code/menumaster
menumaster
__init__.py
views.py
sqltables.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
from menumaster import app, DBSession
@app.route('/restaurants', methods = ['GET'])
def getRestaurants():
# Code here...
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) 文本“向日志文件写入内容”
未出现在错误.log
中
2) 当我从logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
中删除setLevel(logging.INFO)
时,没有任何内容写入error.log
。我认为这会起作用,因为此信息已在日志记录变量中设置
我尝试在LOGGING
中将处理程序
和logger
级别更改为INFO
,但没有成功。最佳实践是每个Python模块声明自己的记录器,如下所示:
import logging
logger = logging.getLogger(__name__)
然后,您可以使用标准的Python日志记录配置来增加或减少每个模块的日志记录冗余度,并将不同模块的日志输出重定向到不同的日志处理程序/文件
下面是一个简单的日志配置dict,显示了如何设置文件日志记录:
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'],
},
}
}
谢谢你的回复,米科。我遇到了一些我已经添加到问题中的问题。它是否与logger.error()
一起工作?@mikkoohtama:是的,当我使用logger.error()
时,会显示消息。我认为根日志处理程序错误级别配置不正确<代码>'':{'level':'INFO'}
如果您的代码是正确的,则应该这样做。