ログ出力クラス

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()

うーん、便利!(←自画自賛