✨
Python loggingメモ
[loggers]
keys=root,module1,module2
[handlers]
keys=consoleHandler,fileHandler
[formatters]
keys=standardFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler,fileHandler
[logger_module1]
level=INFO
handlers=consoleHandler
qualname=module1
propagate=0
[logger_module2]
level=ERROR
handlers=fileHandler
qualname=module2
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=standardFormatter
args=(sys.stdout,)
[handler_fileHandler]
class=FileHandler
level=INFO
formatter=standardFormatter
args=('app.log', 'a')
[formatter_standardFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s
datefmt=%Y-%m-%d %H:%M:%S
import logging
import logging.config
import sys
from module1 import function1
from module2 import function2
def setup_logging(default_path='logging.conf', default_level=logging.DEBUG, env_key='LOG_CFG'):
"""
外部ファイルからログ設定を読み込む関数。
環境変数LOG_CFGが設定されていればそのパスを使用し、なければdefault_pathを使用。
"""
import os
path = default_path
value = os.getenv(env_key, None)
if value:
path = value
if os.path.exists(path):
logging.config.fileConfig(path)
else:
logging.basicConfig(level=default_level)
print(f"Logging configuration file not found: {path}. Using basicConfig.", file=sys.stderr)
def main():
# ログ設定を初期化
setup_logging()
logger = logging.getLogger(__name__)
logger.info("アプリケーションが開始されました。")
# 他のモジュールの関数を呼び出す
function1()
function2()
logger.info("アプリケーションが終了しました。")
if __name__ == '__main__':
main()
Discussion