python - 为什么我的 flask 应用程序没有写入日志文件? (在 ubuntu 上通过 apache2 托管)

标签 python ubuntu flask logging apache2

我的 webapp 使用 Python/Flask,并通过 Apache2 托管在 Ubuntu 服务器上。
我想使用 Python 的日志记录模块写入日志文件。我的开发服务器在 Windows 上,日志在那里按预期工作,但我无法让它在 Ubuntu 测试服务器上工作。
这是我的设置方式:

import logging
from flask import Flask
log_location = os.path.abspath(os.path.join("var", "www", "webApp", "webApp", "logfile.log"))
FORMAT = '%(asctime)s : %(levelname)s : %(name)s : %(message)s'
logging.basicConfig(level=logging.INFO, format=FORMAT, datefmt='%m/%d/%Y %H:%M:%S', handlers=[
        logging.FileHandler(log_location),
        logging.StreamHandler(sys.stdout)])
app = Flask(__name__, static_folder='/var/www/webApp/webApp/web-app-build/build/')
logging.info("Testing the logger...")
有了这个,我希望这个日志写入 /var/www/webApp/webApp/logfile.log 上的日志文件。 ,但即使创建了文件,当我 vim 时,它也是空的。
我可以改成什么
让它起作用?
  • 我知道我可以通过 /var/log/apache2/error.log 访问日志,但我会
    喜欢在上述位置访问它。
  • 根据 this post ,我确保在设置之前设置记录器
    启动应用程序。我还尝试在 __init__.py 中设置记录器(下面的代码),但结果似乎保持不变。
  • 我已确保 www-data 对该目录具有完全权限
    要写入日志文件的位置。

  • 我看到的一些有趣的事情是:
    当我重新加载 apache2 以重新启动应用程序时,尚未创建日志文件。然后,当我在应用程序上执行会导致发生日志记录的操作时,会创建日志文件。然而,它是空的。如果我然后删除日志文件并在应用程序中执行更多通常会导致日志记录的事情,则不会重新创建日志文件。
    from rest.server import app
    import os
    import logging
    import sys
    
    log_location = os.path.abspath(os.path.join("var", "www", "webApp", "webApp", "logfile.log"))
    FORMAT = '%(asctime)s : %(levelname)s : %(name)s : %(message)s'
    logging.basicConfig(level=logging.INFO, format=FORMAT, datefmt='%m/%d/%Y %H:%M:%S', handlers=[
            logging.FileHandler(log_location),
            logging.StreamHandler(sys.stdout)])
    logging.info("Testing the logger...")
    
    
    if __name__ == "__main__":
        app.run()
    

    最佳答案

    默认情况下,flask 使用 Python 的 logging包来写它的日志。你必须把你的日志配置连接到 flask 记录器对象 ,即 app.logger :

    from rest.server import app
    import os
    import logging
    from logging import FileHandler
    import sys
    
    log_location = os.path.abspath(os.path.join("var", "www", "webApp", "webApp", "logfile.log"))
    FORMAT = '%(asctime)s : %(levelname)s : %(name)s : %(message)s'
    file_handler = FileHandler(log_location)
    file_handler.setFormatter(logging.Formatter(FORMAT))
    file_handler.setLevel(logging.INFO)
    
    app.logger.addHandler(file_handler)
    app.logger.info("Testing the logger...")
    
    
    if __name__ == "__main__":
        app.run()
    

    关于python - 为什么我的 flask 应用程序没有写入日志文件? (在 ubuntu 上通过 apache2 托管),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70604306/

    相关文章:

    shell - ubuntu 环境中打开堆栈服务器列表中的排序命令问题

    docker - 我无法访问 Nifi Ui

    python - 由于 ModuleNotFoundError : No module named 'wsgi' ,Flask 无法使用 Docker 启动服务器

    python - Flask 应用程序的简单例份验证方法?

    python - SQLAlchemy PostgreSQL Pyramid 更新问题

    python - 用两个 key= 参数排序

    networking - 使用 tor 作为 SOCKS5 代理与 python urllib2 或 mechanize

    python - Flask-Sqlalchemy 为 'unique' 整数取非唯一值

    python - 以 newick 格式保存 NetworkX 树

    python - 如果不是奇数,如何不返回任何内容或跳过列表中的某个元素