跳到主要內容

[Python] 將運作過程的debug message紀錄到log file的功能

軟體在運作過程難免會遇到一些非預期的狀況讓程式掛點或是種種的不正常行為,這時候往往案發現場不能保留,很多的線索都在重新啟動軟體後消失了。若軟體的行為是要與其他軟體進行交互的,那就更難找出問題了。

所以把軟體運作過程中重要的階段記錄下來是很重要的事,一方面自己軟體的bug可以很快找到觸發的點,另一方面若是別人的軟體造成我們的軟體掛點,log也可以幫助我們提出證據來澄清,不讓別人冤枉我們。

1. 新增一個save log的function:
    def saveLog(self, data):
        currentDirectory = os.getcwd()
        print(currentDirectory)
        filePath = '%s\\Log.txt' % (currentDirectory)
        try:
            if os.path.exists(filePath):
                fileSize = os.path.getsize(filePath)
                print(fileSize)
                if fileSize > 50000000:#50MB
                    os.remove(filePath)
            else:
                print('Log file does not exists')
        except:
            print("Error while deleting Log file ", filePath)
            return

        try:
            file = open(filePath, 'a+')
            file.write('%s\n' % (data))
            file.close()
        except IOError:
            print('Delete Log error!!')
2. 在你要記錄log的地方加上如下的句子:
saveFstLog('%s : %s' % (time.strftime("%Y%m%d%H%M%S", time.localtime()),data))
如此就能將"現在時間"與字串"data"的內容寫入當前目錄下的Log.txt檔案,並且檔案大小如果超過50MB會自動重新記錄。

留言

這個網誌中的熱門文章

[Python] 管理多個執行緒(thread)的運作與結束

在開發應用程式中,幾乎所有的專案都會用到thread,不同的程式語言有不同˙的叫用方法,但都大同小異。Thread的使用上最重要的不是在產生一個thread,而是如何結束一個thread,或是如何結束好幾個threads,以下介紹在Python中如何叫用並管理一或多個thread: 一般來說,create thread如下: def job(): while 1: print("Child thread:", i) time.sleep(1) #In main code thread = threading.Thread.__init__(job) thread.start() 這樣可以開始一個thread執行job()中的動作,但若job中的迴圈是如上範例的無限迴圈,必須要加上能讓其退出的機制: stopped = 0 def job(): global stopped while stopped == 0: print("Child thread:", i) time.sleep(1) #In main code thread = threading.Thread.__init__(job) thread.start() 這樣在主程序先將stopped設成1,再調用 thread.join() 就可以將thread完整關閉並釋放記憶體空間。 多執行續的處理: 基於這樣的方式,下面是進化版本,創建一個thread專用的class,並同時處理多個thread的執行與結束: class EventHandleThread (threading.Thread): def __init__(self, fun, name): threading.Thread.__init__(self) self.name = name self.fun = fun self.stopped = [0] def run(self): self.fun(self.name, self.stopped) print ("Exiting " ...

[Python] 將程式設定為全螢幕顯示(full screen)和永遠在最前景、最上層(topmost)

這裡以創建一個tkinter 的 Application物件為例 EX: app = Application() app.master.title("WaferCheckApp") app.master.geometry("1100x720") 將UI顯示在最上層: app.master.attributes('-topmost', True) 將UI以全螢幕顯示: app.master.attributes('-fullscreen', True)

[Python] 自己製作文字設定檔config file,動態調整程式設定

在軟體開發中,通常不會知道實際使用行為有那些與原先預期不一樣的情況,這時如果還要針對特定的不同需求改程式是很吃力不討好的事情。所以我們常常會需要能夠動態調整一些設定,以應付不同的使用情況。 下面以Python提一個簡單的方法來動態調整程式設定: 建立一個function,在程式初始化時呼叫: EX: def initialSetting():         try:             currentDirectory = os.getcwd()             filePath = '%s\\ ToolSet.cfg ' % (currentDirectory)             file = open(filePath, 'r')             for line in file.readlines():                 if line.find("Value1") == 0:                     str1 = int(line[7:-1])                 elif line.find(" Value2 ") == 0:                      str2  = int(line[7:-1])                 elif line.find(" Value3 ")...