Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask应用程序中多个模块的呼叫记录器_Python_Logging_Flask - Fatal编程技术网

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'}
如果您的代码是正确的,则应该这样做。