2

Windows の Apache 2.2 インスタンスに Flask アプリをデプロイしましたが、すべて正常に動作しています。

次に、アプリにロギングを実装し、Flask のドキュメントを読むことにしました。ファイル ロガーを使用することにしました。これにより、期待するすべてのログ メッセージを含むログ ファイルが生成されます...これは、組み込みの Flask を使用してアプリケーションを実行したときに発生します。ウェブサーバー。関連するコードは次のとおりです。

if __name__ == '__main__':
    #Create a rotating logfile for the application
    handler = RotatingFileHandler('myapp.log', maxBytes=10000, backupCount=1)
    handler.setLevel(logging.INFO)
    handler.setFormatter(Formatter('[%(levelname)s][%(asctime)s] %(message)s'))
    app.logger.setLevel(logging.INFO)
    app.logger.addHandler(handler)
    #Run the app
    app.run(host='0.0.0.0', port=5000)

しかし、アプリを Apache にデプロイすると、アプリはそのログファイルを作成/書き込みしません。Apache はログ フレームワークについて何も知らないため、ログ メッセージは標準の Apache ログファイルにも書き込まれません。

Apache 経由で実行された場合にも、アプリに強制的にログファイルを作成させる方法はありますか? また、Apache にアプリケーション ログをその構成によって決定された別のファイルに書き込むようにさせることもできます。

前もって感謝します!

4

3 に答える 3

4

if __name__ == '__main__'Flask の開発サーバーを使用する場合にのみ実行されるログ セットアップ コード全体がにあります。これは明らかに、Apache サーバーには当てはまりません。簡単な答えは次のとおりです。

ロギング コード全体を if 条件の前に移動すれば問題ありません。


elseif ブロックの後のブロックにコードを配置して、開発時にログを無効にすることもできます (とにかくそこでデバッグ モードを使用しているため)。しかし、実際には、アプリの一部ではないサーバー固有のファイルにサーバー固有のものを入れます。

したがって、本番用の「ランチャー」があります。

from myapp import app

# logging stuff
# app.logger.setHandler(...)

# more configuration

# do some stuff for apache (?)

そして、デバッグ用の「ランチャー」:

from myapp import app
app.run(debug=True)
于 2013-03-07T12:07:53.430 に答える
2

Windows を実行しているため:

Apache サービスを実行するユーザー アカウントはどれですか? デフォルトはシステムです。このアカウントは、ネットワーク リソースへのアクセスが制限されています。Flask アプリケーションは共有ネットワーク ドライブにありますか?

ログ ファイルへのフル パスを設定しようとしましたか?

これで問題が解決しない場合は、アプリケーションの Apache 構成を投稿できますか?

編集:アプリがmod_wsgiでデプロイされたときに、__name__ == '__main__'間違っていなければ、このコードは 実行されません。この場合、ロギングを別の場所で構成する必要があります。

于 2013-03-07T11:01:39.973 に答える
0

apache プロセスを実行するユーザーが、書き込み先のフォルダーに対するアクセス許可を持っていることを確認してください。また、次の結果を確認します。

sudo find / -name myapp.log
于 2013-03-06T19:43:31.010 に答える