LoginSignup
8
4

More than 5 years have passed since last update.

【Python】標準入出力とログファイルへのログ作成方法の試行錯誤メモ

Last updated at Posted at 2018-02-03

PythonにはJavaでいうlog4JやC#でいうlog4netみたいな有名なログ管理方法がないようなので、
仕方なく自分で調べつつ、試行錯誤してみたときのメモとなります。
いい方法があれば情報共有して頂けますと有り難いです。

「Python ログ」あたりでGoogleで検索すると下記のサイトが出ると思うのですが、
そちらのサイトで勉強しつつ、ログファイル出力する方法や設定値をiniファイルへ持たせるようにしています。

「ログ出力のための print と import logging はやめてほしい - Qiita」
https://qiita.com/amedama/items/b856b2f30c2f38665701
https://qiita.com/amedama/items/b856b2f30c2f38665701#%E9%95%B7%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F

一応Python2,3、WindowsとLinuxでの動作確認はしています。
happy coding!

main.py
import configparser
# 必要に応じてエラーレベルは設定してあげて下さい
from logging import getLogger, StreamHandler, Formatter,FileHandler, DEBUG, WARNING


def make_logger(logDirectory, error_level):
    u""" ログ設定を行う"""
    logger = getLogger(__name__)
    logger.setLevel(error_level)
    # フォーマッタを生成する
    fmt = Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

    # 標準出力用ハンドラーを生成する
    stdHandler = StreamHandler()
    stdHandler.setLevel(error_level)
    # ハンドラーにフォーマッターを設定する
    stdHandler.setFormatter(fmt)
    logger.addHandler(stdHandler)

    # ファイル出力ハンドラーを生成する
    # 現在日付
    todayYYYYMMDD = date.today().strftime("%Y%m%d")
    fileHandler = FileHandler(logDirectory.replace(os.path.sep, '/') + '/' + todayYYYYMMDD + '.log')
    fileHandler.setFormatter(fmt)
    # ロガーにハンドラーを設定する
    logger.addHandler(fileHandler)
    return logger


if __name__ == '__main__':
    # 設定ファイルより各種設定を読み込む
    ini_file = configparser.ConfigParser()
    # 実行するpythonファイルと同名のinifileを読み込む
    ini_file.read(args[0].replace('.py', ".ini"), encoding='utf-8')
    # ログ設定
    logger = make_logger(ini_file.get('logger', 'logDirectory'), ini_file.get('logger', 'error_level'))
    # ログ出力を行う
    logger.info('info')
    logger.warn('warn')

main.ini
[logger]
logDirectory = C:\Dev\Log
error_level = WARNING

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4