【问题标题】:How can I show error logs from Flask running on IIS?如何显示在 IIS 上运行的 Flask 的错误日志?
【发布时间】:2021-03-15 12:40:16
【问题描述】:

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

我使用的基本设置是一个简单的“app.py”,在 IIS 中带有“wfastcgi”模块。

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

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

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

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 文件做些什么吗?

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

【问题讨论】:

    标签: flask logging iis wsgi wfastcgi


    【解决方案1】:

    这是我的演示:

    这是我的项目在 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 托管”的更多信息,您可以参考此link

    【讨论】:

    • 非常感谢,效果很好!
    猜你喜欢
    • 2021-11-07
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    相关资源
    最近更新 更多