SikuliX:ログ出力(ユーザー定義)

シナリオ

  • 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