ログ出力クラス
Pythonでは、以下のようにすると、自動的にコンソールとログに同時に出力できるようになります。
#!/usr/bin/env python # -*- coding: utf-8 -*- import traceback, sys class Logger: FILE_INFO = open("info.log", "w") FILE_ERR = open("error.log", "w") ORIGIN_STDOUT = sys.stdout """ ログクラス """ def write(self, value): """ ログに書き込む """ #value = self.getTimeStr() + value self.FILE_INFO.write(value) self.FILE_INFO.flush() sys.stdout = self.ORIGIN_STDOUT sys.stdout.write(value) sys.stdout = self def getTimeStr(): """ 現在時間の取得 """ from time import strftime, localtime return strftime("%Y/%m/%d %H:%M:%S ", localtime()) getTimeStr = staticmethod(getTimeStr) def writeError(type, value, tb): """ ログとコンソールにエラーを書き込む """ msg = Logger.getTimeStr() + "Raise exception...\n" Logger.FILE_ERR.write(msg) sys.stderr.write(msg) tb = traceback.format_exception(type, value, tb) Logger.FILE_ERR.writelines(tb) sys.stderr.writelines(tb) Logger.FILE_ERR.flush() writeError = staticmethod(writeError) def main(): sys.stdout = Logger() # 標準出力のフック sys.excepthook = Logger.writeError # 例外のフック print "hoge" raise "piyo" if(__name__ == "__main__"): main()
うーん、便利!(←自画自賛)