この行数の多いコードに少しだけ便利なloggingを!
この行数に多いコードに少しだけ便利なloggingを!
今回実施したこと
pythonにて、ログレベルとファイル名を指定することで、
任意のログレベルに対応し、ログファイルにも記載してくれるコードを作成、関数化した。
なお、ログ設定にはyaml形式を採用した。
コード
まずはコード全行を記載。
>|python3|
# import
import yaml
from logging import config, getLogger
def my_logger(level = 'DEBUG', filename = None):
logger = getLogger(__name__)
# set config by yaml
conf = """
version: 1
formatters:
default:
format: '%(asctime)s %(levelname)s : %(message)s'
datefmt: '%Y/%m/%d %I:%M:%S'
handlers:
streamHandler:
class: logging.StreamHandler
level: {0}
formatter: default
stream: ext://sys.stdout
fileHandler:
class: logging.FileHandler
level: {0}
formatter: default
filename: {1}
loggers:
myLogger:
level: {0}
handlers: [streamHandler, fileHandler]
propagate: no
root:
level: {0}
handlers: [streamHandler, fileHandler]
disable_existing_loggers: False
"""
config.dictConfig(yaml.load(conf.format(level, filename), Loader=yaml.SafeLoader))
return logger
||<
使用方法は簡潔に、
- level: loggingしたいログレベルを記載。defaultは'DEBUG'にしている。
- filename: ログ出力をしたいファイル名を記載。ディレクトリは事前に準備すること。ファイルは自動で生成する。
出力結果
>|python3|
# 実行
## 関数を使用して設定
logger = my_logger(level = 'INFO', filename = './log/test.log')
## 出力
logger.debug('debug')
logger.info('info')
logger.warning('warning')
logger.error('error')
logger.critical('critical')
# 出力結果 ログレベルを'INFO'にしたので、DEBUGは出力されない
2021/02/25 09:10:09 INFO : info
2021/02/25 09:10:09 WARNING : warning
2021/02/25 09:10:09 ERROR : error
2021/02/25 09:10:09 CRITICAL : critical
||<
カスタマイズしたい場合
- format: ログ出力のフォーマットを指定できるため、いろいろなフォーマットを試すといいかも。
下記サイトにformatterの指定やログレベルに関して説明がありますので、参照するのをおすすめします。
今更だが背景
pythonで自作loggerを作られている方はいらっしゃるが、関数化されていなかったり、
yaml形式ではなく、一行一行setしている方が多かったため、自作をしようと思い立った。
最後に
今回自作でloggerを作っていて思ったことは、意外と設定が面倒だなと思った。
各IT企業はloggerの作成はどうしているのだろう?会社基準とかあるのかな?と、ふと思ったが、意外とこういった知見共有はされないで終わるパターン多いよねと思う。
これからこのloggerをより使えるものにするために、下記を実施する予定だが、
もし「こういった機能が欲しい」「こういった指定がしたい」等あればコメントを貰えると嬉しいです。
- ファイル名の指定がある場合はファイルにログを出力するが、指定がない場合はファイルへのログ出力は行わない
- ファイルに出力するログと、sys.stderr(標準エラー)に出力するログレベルをそれそれ指定できるようにする
ユーザー定義例外クラスとかloggerとか作成してみると面白いよね。
自己紹介も兼ねた初投稿
はじめに
「社会人になったら、自分で学んだ内容をメモ程度にも残しておこう!」と思い立ち、はや1年以上が過ぎた。。。
しかし、何もしないまま2021年を迎えるのはよろしくないと思い、アカウントを作成してみました。
初めての投稿のため、簡単に自己紹介や興味のあること、これからのことを記載してみようと思います。
自己紹介
好きな飲物は上島珈琲のメロンソーダで、食べ物はカレーうどん。
ゲームは好きだし、運動も好き。インドア派ではあるもののアウトドアもある程度好きな、どこにでもいそうな外資系コンサルで働く社会人2年目のエンジニアです。
興味あること
- 心理学(犯罪・臨床・教育etc.)
- 食品
- プログラミング技術
上記の項目を中心にブログを作成していこうと思います。
これから
興味がある項目の内容を気ままに記載・投稿していく予定です。
そもそもブログを始めようと思ったきっかけは、将来的には講師の仕事をしたいなと思っており、そのためのトレーニングも兼ねています。
ただせっかく、ブログという不特定多数の目にも触れるものであるため、目的は先にも述べたとおり、自分へのメモが主体ですが、丁寧に記載していこうと思います。
たまたま検索して、たまたま閲覧して頂いて、私の記載した内容が誰かの興味を引いたり、助けになれれば喜ばしいです。
よろしくお願いします。
独り言
次に投稿するときはちゃんと目次を使いましょうね。