下面的日志代码会弄乱日志文件吗?

时间:2018-01-04 08:57:17

标签: python logging flask uwsgi

下面是一些非常简单的烧瓶代码。我写了一个http api,它将返回'你好'并且记录字符串'你好'如果您向http://127.0.0.1:5000/hello

发送请求,请进入/tmp/mylog.log

有人告诉我,如果多个进程将日志写入一个文件会有问题。因为文件上没有进程级别锁定。因此日志的内容可能会混乱。

但如果我在uwsgi下面的烧瓶代码下面运行会有多个问题。所以多个过程。然后我认为会有问题。

但我在测试时没有发现任何问题。 那么为什么没有问题呢?它应该有问题吗?

import logging
from flask import Flask
app = Flask(__name__)

# The only important thing here is to specify the log file /tmp/mylog.log

file_handler = logging.FileHandler(filename='/tmp/mylog.log')
formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
file_handler.setFormatter(formatter)
logger = logging.getLogger()
logger.addHandler(file_handler)
logger.setLevel(logging.INFO)

@app.route('/hello')
def hello():
    logger.info('hello')
    return 'hello'

2 个答案:

答案 0 :(得分:1)

Flask什么也没做。 Python日志记录的默认值是输出到sys.stdout。当使用uWSGI或Gunicorn之类的东西时,他们会将每个worker的stdout收集到你配置的日志文件中。或者您可以配置Python的日志记录系统以输出您想要的位置和方式,尽管这样做不那么简单。通常,让WSGI服务器从工作程序收集和输出stdout是最简单的。

答案 1 :(得分:0)

您可以使用from flask import Flask, render_template app = Flask(__name__) @app.route('/'): def index(): app.logger.info("Hit the main route !") return render_template('index.html') 在Flask中记录内容。即使多个Flask进程正在运行,它也能正常工作。

logging

如果您想自定义日志消息,您还可以使用Python的import logging log = logging.getLogger(__name__) 库,以及它的无限可自定义日志。

只需在文件顶部添加以下内容:

log.debug("complex mathematical equations and heavy outputs")
log.info("the sky is blue")
log.error("something's not right")
log.critical("dangeeeer ! its's blowing up !")

和,记录消息:

const Sequelize = require('Sequelize');
//...
class Application {
    Sequelize = Sequelize;
}

您可以通过Google在线阅读许多教程(如设置文件处理程序,格式化程序,记录程序......)。