時間格式有很多種,了解各種時間格式是看懂log的基礎之一。
本文介紹如何利用python轉換MQTT log中的epoch time時間格式。
Epoch time
Epoch time就是UNIX時間,是UNIX系統使用的時間表示方式。
簡單的定義就是從1970年1月1日0時0分0秒起至現在的總秒數。(不考慮閏秒)
了解更多請參閱Wikipedia。
Python轉換時間格式
那麼要怎麼轉換時間格式呢?
這邊拿2019/02/20做的紀錄來當例子,
下面為節錄部分2019/02/20所產生的MQTT log。
1 2 3 4 5 6 |
1550627912: mosquitto version 1.4.9 (build date 08/06/2016 11:59:29.51) starting 1550627912: Config loaded from C:\Program Files(x86)\mosquitto/mosquitto.conf. 1550627912: Opening ipv6 listen socket on port 1883. 1550627912: Opening ipv4 listen socket on port 1883. 1550627913: New connection from 192.168.0.10 on port 1883. 1550627913: New client connected from 192.168.0.10 as new_client (c1, k20). |
可以看到前方的一串數字就是epoch時間格式,
我們就是要將它轉換為易讀的時間格式,
python code轉換方式如下:
1 2 3 4 |
import time mqttTime = 1550627913 returnTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(mqttTime)) |
上面程式碼為單純轉換某一時間,
若是要整個MQTT log檔案作轉換的話,
則需要搭配讀檔,並逐行讀入轉換輸出。
如此一來即可輸出一份時間轉換後之檔案。
完整讀檔轉換程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import sys import time import os # MQTT log file 檔案名稱 logFile = "mosquitto.log" # file existed or not if os.path.isfile(logFile): # read original mitt log file f_ori = open(logFile, 'r') # custom output file name f_target = open('fixdate_' + logFile, 'w') # read line in log file for line in f_ori: # translate time timeStr = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(line.split(':', 1)[0]))) # the rest data dataStr = line.split(':', 1)[1] # write lines f_target.writelines(timeStr + dataStr) # close files f_ori.close() f_target.close() |
留言