예제 #1
0
파일: Log.py 프로젝트: lanecatm/AlgoTrading
class Log:
    def __init__(self,
                 isOpen=True,
                 saveInfo=True,
                 saveWarning=True,
                 saveError=True,
                 logDirName="log"):
        self.saveInfo = saveInfo
        self.saveError = saveError
        self.saveWarning = saveWarning
        # 获取当前"运行"目录
        logDir = os.getcwd() + "/" + logDirName + "/"
        if not os.path.exists(logDir):
            os.mkdir(logDir)
        timeFormat = "%Y_%m_%d_%H_%M_%S"
        timeStr = time.strftime(timeFormat, time.localtime())
        fileNameStr = self.__get_parent_filename()
        fileNameStr = os.path.basename(fileNameStr)
        fileNameStr, ext = os.path.splitext(fileNameStr)
        self.infoFilename = logDir + "INFO_" + fileNameStr + "_" + timeStr + ".log"
        self.infoNowName = logDir + "INFO_" + fileNameStr + ".log"
        self.errorFilename = logDir + "ERROR_" + fileNameStr + "_" + timeStr + ".log"
        self.errorNowName = logDir + "ERROR_" + fileNameStr + ".log"
        self.warningFilename = logDir + "WARNING_" + fileNameStr + "_" + timeStr + ".log"
        self.warningNowName = logDir + "WARNING_" + fileNameStr + ".log"
        self.fileHelper = FileHelper()
        self.isOpen = isOpen
        return

    def __del__(self):
        try:
            os.remove(self.infoNowName)
            os.remove(self.errorNowName)
            os.remove(self.warningNowName)
        except:
            self.info("no old log file to remove")

        os.symlink(self.infoFilename, self.infoNowName)
        os.symlink(self.errorFilename, self.errorNowName)
        os.symlink(self.warningFilename, self.warningNowName)
        return

    # @param maeeage string
    # @return None
    def info(self, message=""):
        if not self.isOpen:
            return
        outputInfo = "[INFO] " + self.__get_parent_filename(
        ) + " " + self.__get_parent_lineno() + ": " + message
        print outputInfo
        self.fileHelper.append(self.infoFilename,
                               outputInfo + "\n",
                               isAbs=True)
        return

    # @param message string
    # @return None
    def warning(self, message=""):
        if not self.isOpen:
            return
        outputInfo = "[WARNING] " + self.__get_parent_filename(
        ) + " " + self.__get_parent_lineno() + ": " + message
        print outputInfo
        self.fileHelper.append(self.warningFilename,
                               outputInfo + "\n",
                               isAbs=True)
        return

    # @param message string
    # @return None
    def error(self, message=""):
        if not self.isOpen:
            return
        outputInfo = "[ERROR] " + self.__get_parent_filename(
        ) + " " + self.__get_parent_lineno() + ": " + message
        print outputInfo
        self.fileHelper.append(self.errorFilename,
                               outputInfo + "\n",
                               isAbs=True)
        return

    # @param errorStatus ErrorCode
    def check_rtn(self, errorStatus, message=""):
        if errorStatus != ErrorCode.Status.SUCC:
            print "[ERROR RTN] " + self.__get_parent_filename(
            ) + " " + self.__get_parent_lineno(
            ) + ": error " + errorStatus + " " + message

    def assert_eq(self, input1, input2):
        if input1 != input2:
            print "[ASSERT EQ] " + self.__get_parent_filename(
            ) + " " + self.__get_parent_lineno() + ": [expect] " + str(
                input1) + ", [actual] " + str(input2)

    #def __get_parent_class_name(self):
    #    return sys._getframe().f_back.f_code

    def __get_parent_function_name(self):
        return sys._getframe().f_back.f_back.f_code.co_name

    def __get_parent_filename(self):
        filename = sys._getframe().f_back.f_back.f_code.co_filename
        return os.path.expanduser(filename)

    def __get_parent_lineno(self):
        return str(sys._getframe().f_back.f_back.f_lineno)
예제 #2
0
from Log import Log
from FileHelper import FileHelper

if __name__ == "__main__":
    log = Log()
    log.info("start test FileHelper")

    testContent = "hello abc"
    fileHelper = FileHelper()
    rtn = fileHelper.write("hello.txt", testContent)
    log.check_rtn(rtn)
    rtn, content = fileHelper.read("hello.txt")
    log.check_rtn(rtn)
    log.assert_eq(testContent, content)
    testContentNew = "def"
    rtn = fileHelper.append("hello.txt", testContentNew)
    log.check_rtn(rtn)
    rtn, content = fileHelper.read("hello.txt")
    log.check_rtn(rtn)
    log.assert_eq(testContent + testContentNew, content)

    rtn = fileHelper.append("hello2.txt", testContentNew)
    log.check_rtn(rtn)
    rtn, content = fileHelper.read("hello2.txt")
    log.check_rtn(rtn)
    log.assert_eq(testContentNew, content)

    os.remove("hello.txt")
    os.remove("hello2.txt")
    sys.exit()