3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

とりあえず使えりゃ良いんだよ使えりゃという雑なpythonログ出力実装メモ

Last updated at Posted at 2018-05-30

どこもかしこも

ログの階層構造の説明だの、複数ファイルで出力するときの方法だのなんだのと。
説明が冗長……とは言いませんが、詳しすぎて初心者にはきつかったです。

いや、ログのレベルの概念は理解してますねん。

pythonでのログの書き方を知りたいだけですねん。

そういう気持ちを形にしました。

最低限

1ファイルで完結するpythonのプログラムでログを吐かせたいだけならこれでOK。

import logging

# ログ定義
logger = logging.getLogger(__name__) # %(name)sになる
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# 標準出力
streamHandler = logging.StreamHandler()
streamHandler.setFormatter(formatter)

# ファイル出力
fileHandler = logging.FileHandler('./log/hogehoge.log')
fileHandler.setFormatter(formatter)

# ロガーにハンドラーを追加
logger.addHandler(streamHandler)
logger.addHandler(fileHandler)

# ログ出力時
logger.info("info log message.")
logger.debug("debug log message.")

これで標準出力とファイルの両方にログが記録されていく。
出力先ごとにログのレベルを変えたい場合は個別のハンドラにfileHandler.setLevel(logging.INFO)とかすれば変わる。

asctimeはローカルの時間になるっぽい? です。
cloud9が何故か西アメリカになっていたのでそのせいかな……設定のAWS Settingsを変えたら変わるかと思ったんですが変わりませんで。
設定の再読込が必要なのかなー……と思いつつ、あんまり不便ではないので放置しています。

メール出力

最低限+αでメールについても載せておきます(自分が使いたいので……)

# メール出力
import logging.handlers

emailHandler = logging.handlers.SMTPHandler(
    mailhost='smtp.mailtrap.io',
    fromaddr='FROMアドレス',
    toaddrs=['TOアドレス'],
    subject='メールタイトル',
    credentials=('user', 'password')
    )

emailHandler.setFormatter(formatter)

logger.addHandler(emailHandler)


参考資料

ひとつめが割と求めるものに近いざっくりした内容。
ふたつめがもう少し詳しいので、なんとなく動きを確認したら読んでみると良いかも。

ちゃんみおポイント

ひとつめの方で、若干 ぜんぜん違うじゃん!! となったのでメモ。若干ぜんぜんとは

importが紛らわしい

ベストプラクティス、として紹介されているコードにfrom logging import getLogger,StreamHandler,DEBUGとか書いてあるのだけれど、結局あとでFormatterとか使うときに修正するので最初からimport loggingでいいのでは……となりました。

コードが違う

お手本
formatter = logging.Formatter('%(asctime)s - %(name) - %(Levelname)s - %(message)s') #%()内に入る属性はLogRecordと呼ばれる

# 結果
# 2018-05-30 08:27:48,918 - %(levelname)s - Min:811625.0,Target:807566.875,Current:816000.0

修正
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') #%()内に入る属性はLogRecordと呼ばれる

# 結果
# 2018-05-30 08:34:31,068 - __main__ - INFO - Min:812945.0,Target:808880.275,Current:817105.0

「$(name) - 」が読み飛ばされてるっぽいのが謎すぎて焦りました。

追記

ログについていろいろ書かれていて勉強になりました。

import loggingでいいのでは、とか言ってごめんな……

3
5
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
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?