ga('set', 'anonymizeIp', 1);
時間格式有很多種,了解各種時間格式是看懂log的基礎之一。
本文介紹如何利用python轉換MQTT log中的epoch time時間格式。
Epoch time就是UNIX時間,是UNIX系統使用的時間表示方式。
簡單的定義就是從1970年1月1日0時0分0秒起至現在的總秒數。(不考慮閏秒)
了解更多請參閱Wikipedia。
那麼要怎麼轉換時間格式呢?
這邊拿2019/02/20做的紀錄來當例子,
下面為節錄部分2019/02/20所產生的MQTT log。
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轉換方式如下:
import time
mqttTime = 1550627913
returnTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(mqttTime))
上面程式碼為單純轉換某一時間,
若是要整個MQTT log檔案作轉換的話,
則需要搭配讀檔,並逐行讀入轉換輸出。
如此一來即可輸出一份時間轉換後之檔案。
完整讀檔轉換程式碼如下:
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()