実現したいこと
pythonのflaskでログの機能が使えません。
発生している問題・分からないこと
/app/src/logs
該当のソースコード
・フォルダの階層 ├── app : Python3のイメージを基に作成されたDockerコンテナ用のディレクトリ。 │ ├── Dockerfile : Dockerでの設定 │ ├── requirements.txt : pipインストールされるPythonの外部モジュール │ └── src │ ├──__init__.py │ ├── api.py : オフラインバッチを実行するREST API用のファイル ※追加説明 │ ├── batch : バッチ処理一つにつき1ファイルのPythonスクリプトが入るディレクトリ ※ 追加説明 │ │ ├── __pycache__ : 説明省略 │ │ │ └── *.pyc │ │ └── bt012.py │ ├── conf : gunicornの設定ファイルが配置されるディレクトリ │ │ ├── __pycache__ : 説明省略 │ │ │ └── gunicorn_config.cpython-39.pyc │ │ └── gunicorn_config.py │ ├── download : FTPサーバーや外部から取得され、永続的に保存するファイルを配置するディレクトリ │ │ ├── *.txt │ │ ├── *.csv │ │ ├── *.xlsx │ │ └── *.pdf │ ├── json : プログラム内で使用するデータ │ │ ├── batchInformation.json │ │ ├── chohyoInformation.json │ │ ├── loggingInformation.json │ │ └── screenInformation.json │ ├── logs : Pythonのloogerを使用したロギングにより出力されるログファイルを配置するディレクトリ │ ├── sc001.py : ログイン画面処理ファイル │ ├── sc002.py : メニュー画面処理ファイル │ ├── static : フロントエンドで共通して使用されるスタイルシート・ライブラリ │ │ ├── css │ │ │ ├── bootstrap.min.css │ │ │ ├── bootstrap.min.css.map │ │ │ ├── flatpickr.min.css │ │ │ ├── monthSelect.css │ │ │ └── style.css │ │ └── js │ │ ├── custom_utility.js │ │ └── library │ │ ├── bootstrap.bundle.min.js │ │ ├── bootstrap.bundle.min.js.map │ │ ├── flatpickr │ │ ├── flatpickr_ja.js │ │ ├── jquery-3.6.1.min.js │ │ └── monthSelect.js │ ├── templates : ID事の画面処理ファイルに紐づけられたテンプレートHTMLファイル │ │ ├── layout.html : 画面共通で使用されるテンプレートHTMLファイル │ │ ├── pdf : PDF出力ファイル用テンプレートディレクトリ │ │ │ └── 24_BT003.html │ │ ├── sc001 : 画面処理ID「sc001」用のテンプレートディレクトリ │ │ │ └── login.html │ │ ├── sc002 : 画面処理ID「sc002」用のテンプレートディレクトリ │ │ │ └── index.html │ │ ├── sc003 : 画面処理ID「sc003」用のテンプレートディレクトリ │ │ │ └── file_download.html │ │ ├── ... │ │ ├── scXXX : │ │ │ └── ???.html │ │ ├── ... │ │ ├── sc032 : 画面処理ID「sc032」用のテンプレートディレクトリ │ │ │ └── codeID.html │ │ └── sc033 : 画面処理ID「sc033_01」と「sc033_02」共通のテンプレートディレクトリ │ │ └── codeID_form.html ├── docker-compose.yml └── web ├── Dockerfile └── httpd └── custom.conf ・docker-compose.yml version: '1' services: app: build: ./app networks: - apply_network volumes: - type: bind source: "C:/Users/pcuser/source_code/apply_jinji/app/flask_test_jisshi" # ログファイル出力ディレクトリの設定。開発時にはローカルPC上の任意のディレクトリを指定 target: "/app/src/logs" - type: bind source: "C:/Users/pcuser/source_code/apply_jinji/app/src" # Flaskディレクトリの設定。開発時にはローカルPC上の apply_jinji/app/src/ ディレクトリを指定 target: "/app/src/" environment: TZ: Asia/Tokyo web: build: ./web networks: - apply_network ports: - 80:80 volumes: - type: bind source: "C:/Users/pcuser/source_code/apply_jinji/app/apache_output" # Apacheログ出力先ディレクトリの設定。開発時にはローカルPC上の任意のディレクトリを指定 target: "/var/log/apache2" environment: TZ: Asia/Tokyo scheduler: build: ./scheduler networks: - apply_network environment: TZ: Asia/Tokyo tty: true privileged: true networks: apply_network: # volumes: # db-store: # volume名「db-store」としてデータを永続的に保持することができる。ホストとはマウントしていない。
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
docker-compose.ymlの記載に、ログの出力として、
以下を記載しています。
source: "C:/Users/pcuser/source_code/zeria_jinji/app/flask_test_jisshi"
target: "/app/src/logs"
以下のソースのcurrent_app.logger.info("【sc001_start】初期表示開始")から、
ログが出力するはずですが、/app/src/logsのログに、記載されません。
・sc001.py
from flask import Blueprint,render_template,make_response,request,redirect,current_app,session,jsonify
import flask_login
import json
import re
from utils import custom_login, custom_any, custom_request, custom_response, custom_psql
SCREEN_KEY = "sc001"
with open("json/screenInformation.json", encoding="utf-8") as f:
SCREEN_ALL = json.load(f)
with open('json/messageInformation.json') as f:
MESSAGE_ALL = json.load(f)
app = Blueprint(
SCREEN_ALL[SCREEN_KEY]["flask"]["simple_page"],
name,
url_prefix=SCREEN_ALL[SCREEN_KEY]["flask"]["url_prefix"],
template_folder=SCREEN_ALL[SCREEN_KEY]["flask"]["template_folder"],
static_folder=SCREEN_ALL[SCREEN_KEY]["flask"]["static_folder"]
)
@app.route('/')
def screen_sc001():
"""ログイン画面
ログイン画面を返す。
Returns:
str: ログイン画面のHTML
"""
return render_template(SCREEN_ALL[SCREEN_KEY]["template"], screens=SCREEN_ALL, screen_key=SCREEN_KEY, breadcrumb=custom_any.create_breadcrumb(SCREEN_KEY, SCREEN_ALL))
@app.route('/check', methods=["POST"])
def check_login():
"""ログイン認証
入力フォームのデータをデータベースと照らし合わせた認証を行い、正誤によりログイン処理とログイン失敗処理のいずれかを行う。
Returns:
obj: ログイン認証の結果が含まれる連想配列
"""
current_app.logger.info("【sc001_start】初期表示開始")
req = custom_request.Request(title="", data=dict(request.form))
・init.py
ロギング設定
with open("json/loggingInformation.json", encoding="utf-8") as f:
dictConfig(json.load(f))
・loggingInformation.json
{
"version": 1,
"formatters": {
"default": {
"format": "[%(asctime)s] %(thread)d %(threadName)s %(levelname)-s [%(filename)s:%(lineno)3d] %(message)s"
}
},
"handlers": {
"wsgi": {
"class": "logging.StreamHandler",
"stream": "ext://flask.logging.wsgi_errors_stream",
"formatter": "default"
},
"output_file": {
"formatter": "default",
"class": "logging.handlers.RotatingFileHandler",
"filename": "logs/aplly_logger.log",
"mode": "a",
"maxBytes": 1048576,
"backupCount": 2
}
},
"root": {
"level": "DEBUG",
"handlers": ["wsgi", "output_file"]
}
}
補足
docker環境で、ビルド、ラン後に、
以下のsc001.pyの画面には来ています。
以下のディレクトリに、ログが出ません。
C:/Users/pcuser/source_code/zeria_jinji/app/src/logs
何かしらログを出す方法を、お聞きしてもよろしいですか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/02/16 04:59
2024/02/16 06:03
2024/02/16 08:11 編集
2024/02/16 08:30
2024/02/19 00:51
2024/02/19 05:07