3

我已经阅读了我能找到的所有内容,但我遇到了障碍。我已经设置了在本地主机上运行时的错误日志记录,但是当我在生产服务器 (IIS) 上运行它时,没有创建日志文件,也没有发送电子邮件报告。

我使用的基本设置是一个简单的 'app.py' 和 IIS 中的 'wfastcgi' 模块。

根据我的(有限)理解,在阅读后,似乎 WSGI 是开发(本地主机)和生产服务器(我认为?)之间的关键区别。

这是我一直在尝试的代码(适用于 localhost,但不适用于 IIS):

[请注意,这是一个原型版本,因此是简单的 'app.py'、'app.run()' 等......最终版本实现了 Flask 'Application Factory' 设置。出于安全原因删除了各种值]

app = Flask(__name__)
app.config['SECRET_KEY'] = SECRET

** APP LOGIC HERE **

if __name__ == "__main__":
    if not app.debug:
        if not os.path.exists(os.path.join(app.root_path, 'logs')):
            os.mkdir(os.path.join(app.root_path, 'logs'))

        class ErrorFormatter(logging.Formatter):
            def format(self, record):
                if current_user.is_authenticated:
                    record.email = str(decrypt(current_user.email))
                else:
                    record.email = "GUEST"
                return super().format(record)

        formatter = ErrorFormatter(
            '\n=========================\n\n%(asctime)s %(levelname)s: [User: %(email)s]\n%(message)s [in %(pathname)s:%(lineno)d]\n\n'
        )

        file_handler = RotatingFileHandler(os.path.join(app.root_path, 'logs', 'error_log.log'), maxBytes=102400, backupCount=10)
        file_handler.setFormatter(formatter)
        file_handler.setLevel(logging.ERROR)
        app.logger.addHandler(file_handler)

        auth = (EMAIL, PASSWORD)
        secure = ()
        mail_handler = SMTPHandler(
            mailhost=(SERVER, PORT),
            fromaddr=EMAIL,
            toaddrs=RECIPIENT,
            subject=SUBJECT,
            credentials=auth,
            secure=secure
        )
        mail_handler.setFormatter(formatter)
        mail_handler.setLevel(logging.ERROR)
        app.logger.addHandler(mail_handler)
    app.run(host=HOST, debug=False)

也许我应该对 web.config 文件做些什么?

任何帮助将不胜感激。谢谢。

4

1 回答 1

2

这是我的演示:

在此处输入图像描述

这是我的项目在 IIS 中的目录结构。

from logging.handlers import RotatingFileHandler

from flask import Flask
import logging
import time
import os

app = Flask(__name__)

handler = RotatingFileHandler(os.path.join(app.root_path, 'logs', 'error_log.log'), maxBytes=102400, backupCount=10)
logging_format = logging.Formatter(
    '%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s')

handler.setFormatter(logging_format)
app.logger.addHandler(handler)


@app.errorhandler(404)
def page_not_found(error):
    app.logger.error(error)

    return 'This page does not exist', 404


@app.errorhandler(500)
def special_exception_handler(error):
    app.logger.error(error)
    return '500 error', 500


def page_not_found(error):
    return 'This page does not exist', 404


app.error_handler_spec[None][404] = page_not_found


@app.route('/')
def testdasdas1():
    no_thing = []
    i = no_thing[0]
    return 'Hello!'


if __name__ == '__main__':
    app.run()

这是 hello.py。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="FlaskFastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\Python27\python.exe|C:\Python27\lib\site-packages\wfastcgi.pyc" resourceType="Unspecified" requireAccess="Script" />
    </handlers>
    <security> 
        <requestFiltering allowDoubleEscaping="true"></requestFiltering> 
    </security> 
  </system.webServer>
 
  <appSettings>
    <add key="WSGI_HANDLER" value="hello.app" />
    <add key="PYTHONPATH" value="~/" />
     <add key="WSGI_RESTART_FILE_REGEX" value=".*((\.py)|(\.config))$" />
  </appSettings>
</configuration>

这是 web.config。

在此处输入图像描述

有关“Windows 10 IIS 服务器上的 Python Flask 托管”的更多信息,您可以参考此链接

于 2020-12-04T03:11:09.533 回答