シナリオ
- CSV形式で出力
- Excelで開いても全角文字が化けないように文字コード:utf-8 BOM付きで出力する
- ログ出力先:c:¥Logs
- ログファイル名:<コンピュータ名>_YYYYMMDD-HHMMSSログ.csv
サンプルコード
import sys
import os
import socket
import datetime
import csv
# ログパス
LOG_PATH = u"c:\\Logs\\" + socket.gethostname() + "_" + datetime.datetime.today().strftime("%Y%m%d-%H%M%S") + u"_ログ" + ".csv"
# ログ用
class LogInfo:
def __init__(self,\
date="",\
prior="",\
message="",\
place=""):
self.date = datetime.datetime.today().strftime("%Y/%m/%d %H:%M:%S")
self.prior = prior
self.message = message
self.place = place
self.syslog_writer()
# ログ書き込み
def syslog_writer(self):
mode = "a" if os.path.exists(LOG_PATH) else "w"
f = open(LOG_PATH, mode)
writer = csv.writer(f, lineterminator='\n')
# 初回はタイトル行書き込み
if (mode == "w"):
data = [u"日時".encode("utf_8_sig"),\
u"優先度".encode("utf_8_sig"),\
u"メッセージ".encode("utf_8_sig"),\
u"関数名".encode("utf_8_sig")]
writer.writerow(data)
# ログ書き込み
data = [self.date,\
self.prior.encode("utf_8_sig"),\
self.message.encode("utf_8_sig"),\
self.place.encode("utf_8_sig")]
writer.writerow(data)
f.close()
def main():
# ログ出力
LogInfo(prior = "notice", message = u"ログ取得開始", place=sys._getframe().f_code.co_name)
wait(1)
LogInfo(prior = "info", message = u"○○処理実行", place=sys._getframe().f_code.co_name)
wait(2)
LogInfo(prior = "info", message = u"○○処理実行", place=sys._getframe().f_code.co_name)
wait(3)
LogInfo(prior = "notice", message = u"ログ取得終了", place=sys._getframe().f_code.co_name)
if __name__ == '__main__':
main()
結果
ファイル名:<コンピュータ名>_20210228-160720_ログ.csv
日時,優先度,メッセージ,関数名
2021/02/28 16:07:20,notice,ログ取得開始,main
2021/02/28 16:07:21,info,○○処理実行,main
2021/02/28 16:07:23,info,○○処理実行,main
2021/02/28 16:07:26,notice,ログ取得終了,main