首页 > 解决方案 > Flask stdout 记录器消息未反映在 apache error_log 中

问题描述

我正在构建一个在 apache httpd 服务器上运行的烧瓶应用程序。

我想将烧瓶应用程序的所有 app.logger 消息推送到应用程序特定的日志文件以及 apache error_log 文件(通过 stdout 日志处理程序)。

from flask import Flask
import logging
import sys
from logging import Formatter, FileHandler

app = Flask(__name__)

logFileHandler = logging.FileHandler(filename="test.log")
logFileHandler.setLevel(logging.DEBUG)

logStdoutHandler = logging.StreamHandler(stream=sys.stdout)
logStdoutHandler.setLevel(logging.DEBUG)

app.logger.addHandler(logStdoutHandler)
app.logger.addHandler(logFileHandler)
app.logger.setLevel(logging.DEBUG)
app.logger.error("main test")

@app.route('/')
def hello():
   app.logger.error("hello")
   print("hello")
   return 'Hello'

输出: test.log:有两个 app.logger() 调用的条目

main test
hello

apache error_log:只有来自主 app.logger() 调用的日志。(假设,日志重复可能与flask添加的default_handler有关)

ERROR in home: main test
main test
  1. 为什么 hello() 方法内部的 app.logger() 调用仅在 error_log 中丢失,而在 test.log 文件中没有?
  2. 有没有更好的方法将应用程序日志与应用程序日志文件一起推送到 apache error_log?

标签: pythonapacheflaskhttpd.conf

解决方案


推荐阅读