两个 Flask 实例,一条控制台消息
Two Flask Instances, One Console Message
我在 LAMP
服务器上有两个 flask 运行 实例。两者都在自己的虚拟环境中。
我注意到,如果我同时拥有两个 运行 不同的非 root 用户,从 "web" 的角度来看,它们工作正常但是,我只从一个实例中获得控制台消息/调试。
有没有一种方法可以同时显示控制台消息或将此类输出路由到文件?
Flask has a pretty great tutorial when it comes to application logging
我个人的建议是使用这样的东西
if not app.debug:
import logging
from themodule import TheHandlerYouWant
file_handler = logging.handlers.RotatingFileHandler(
filename="/var/log/<flask_instance_name>",
maxBytes=500000000,
backupCount=4)
file_handler.setLevel(logging.WARNING)
app.logger.addHandler(file_handler)
在这种情况下,每个文件的作用超过 500 Mb,一次可以有 5 个副本,500 Mb * 5 files = 2.5 Gb * 2 instances = 5 Gb
总潜在 space 利用率仅在日志上。我强调这些数字是因为它们很重要。
稍微复杂但总体上更好的方法是使用 NTEventLog 或 SysLog。这些更复杂,因为它们需要更改系统。例如,SysLog 要求 UDP 端口 514
处于打开状态并处于侦听状态
if not app.debug:
import logging
from themodule import TheHandlerYouWant
file_handler = logging.handlers.SysLogHandler(address="Instance address")
file_handler.setLevel(logging.WARNING)
app.logger.addHandler(file_handler)
重要的是每个 flask 应用程序的地址或文件名参数都不同。
在您实例化记录器之后,您可以在 flask 中应用程序范围内的任何地方调用记录器。现在您可以明确控制日志消息的去向。
@app.route('/', methods=['GET', 'POST'])
def home_page():
app.logger.debug("I'm a debugging message going to file {}!".format(
app.logger.baseFilename))
return "This is a test home page."
我在 LAMP
服务器上有两个 flask 运行 实例。两者都在自己的虚拟环境中。
我注意到,如果我同时拥有两个 运行 不同的非 root 用户,从 "web" 的角度来看,它们工作正常但是,我只从一个实例中获得控制台消息/调试。
有没有一种方法可以同时显示控制台消息或将此类输出路由到文件?
Flask has a pretty great tutorial when it comes to application logging
我个人的建议是使用这样的东西
if not app.debug:
import logging
from themodule import TheHandlerYouWant
file_handler = logging.handlers.RotatingFileHandler(
filename="/var/log/<flask_instance_name>",
maxBytes=500000000,
backupCount=4)
file_handler.setLevel(logging.WARNING)
app.logger.addHandler(file_handler)
在这种情况下,每个文件的作用超过 500 Mb,一次可以有 5 个副本,500 Mb * 5 files = 2.5 Gb * 2 instances = 5 Gb
总潜在 space 利用率仅在日志上。我强调这些数字是因为它们很重要。
稍微复杂但总体上更好的方法是使用 NTEventLog 或 SysLog。这些更复杂,因为它们需要更改系统。例如,SysLog 要求 UDP 端口 514
处于打开状态并处于侦听状态
if not app.debug:
import logging
from themodule import TheHandlerYouWant
file_handler = logging.handlers.SysLogHandler(address="Instance address")
file_handler.setLevel(logging.WARNING)
app.logger.addHandler(file_handler)
重要的是每个 flask 应用程序的地址或文件名参数都不同。
在您实例化记录器之后,您可以在 flask 中应用程序范围内的任何地方调用记录器。现在您可以明确控制日志消息的去向。
@app.route('/', methods=['GET', 'POST'])
def home_page():
app.logger.debug("I'm a debugging message going to file {}!".format(
app.logger.baseFilename))
return "This is a test home page."