Python 寫日誌文件

【例】/root/testpmpy/bin/recordLog.py的作用是記錄日誌,記錄的日誌會存放在/root/testpmpy/log下。最新的日誌名稱爲iamrecord.log,之後每次運行都會將上一個iamrecord.log加上時間戳後綴。recordLog.py內容如下

注:舉例僅描述功能,單獨使用沒有實際意義,可以作爲函數嵌入到其它腳本。

import sys, os, time, shutil
import datetime as pydate

root_dir = os.path.dirname(os.path.abspath(__file__)).split('bin')[0]
logfile = None
currentlog = None

def startLog():
    global logfile, currentlog
    try:
        logdir = root_dir + os.sep + 'log'
        if not os.path.exists(logdir):
            os.makedirs(logdir)
        currentlog = logdir + os.sep + "iamrecord" + ".log"

        if(os.path.isfile(currentlog)):
            logtime = pydate.datetime.now().strftime("%Y-%m-%d_%H.%M.%S")
            historylog = currentlog + "." + logtime
            #將上一個iamrecord複製爲加上時間戳的iamrecord.log.yyyy-mm-dd_HH.MM.SS
            shutil.copyfile(currentlog, historylog)

        logfile = open(currentlog, 'w')

    except Exception as e:
        print(str(e))

    writeLog("Start to log:")
    print("Start to log:")

def stopLog():
    global logfile
    try:
        time.sleep(0.1)
        writeLog("Finish the log.")
        logfile.close()
        print("Finish the log.")

    except Exception as e:
        print(str(e))

def writeLog(str):
    global logfile
    timeStamp = pydate.datetime.now().strftime("%Y-%m-%d %H.%M.%S.%f")
    logfile.write(timeStamp + "\t" + str + "\n")
    logfile.flush()

def test_today():
    #只寫日誌、不輸出到屏幕上
    writeLog("Today is Tuesday.")
    writeLog("Today is a sunny day.")

def test_cpfile(src_file,tgt_file):

    if(os.path.exists(src_file)):
        msg = "Copy file from '" + src_file + "' to '" + tgt_file + "'."
        #寫日誌、同時也印到屏幕上
        print(msg)
        writeLog(msg)
        shutil.copyfile(src_file, tgt_file)
    else:
        msg = src_file + " not existed."
        print(msg)
        writeLog(msg)

if __name__ == '__main__':

    startLog()
    test_today()
    test_cpfile('/root/testpmpy/user_op_log.1','/tmp/tmplog')
    stopLog()

說明:
line4,os.path.abspath(__file__) -> 獲取當前腳本的完整路徑,recordLog.py所在的路徑是/bin/, 緊接着.split('bin')[0] -> 以"bin"爲分隔符,得到路徑/root/testpmpy
line10 ,os.path.exists()判斷括號中的文件是否存在

執行recordLog.py輸出如下,注意 test_today() 和 test_cpfile() 的差別 -> 打印到屏幕和寫入日誌文件:

[root@xxx bin]# python3 recordLog.py
Start to log:
Copy file from '/root/testpmpy/user_op_log.1' to '/tmp/tmplog'.
Finish the log.
[root@xxx bin]# cd ../log/
[root@xxx log]# ls -l
total 16
-rw-r--r--. 1 root root 269 Mar 17 17:51 iamrecord.log
-rw-r--r--. 1 root root 269 Mar 17 17:42 iamrecord.log.2020-03-17_17.42.38
-rw-r--r--. 1 root root 269 Mar 17 17:47 iamrecord.log.2020-03-17_17.47.18
-rw-r--r--. 1 root root   0 Mar 17 17:49 iamrecord.log.2020-03-17_17.49.47
-rw-r--r--. 1 root root 269 Mar 17 17:51 iamrecord.log.2020-03-17_17.51.43
[root@xxx log]# cat iamrecord.log
2020-03-17 17.51.43.927020      Start to log:
2020-03-17 17.51.43.927112      Today is Tuesday.
2020-03-17 17.51.43.927161      Today is a sunny day.
2020-03-17 17.51.43.927233      Copy file from '/root/testpmpy/user_op_log.1' to '/tmp/tmplog'.
2020-03-17 17.51.44.027720      Finish the log.
[root@xxx log]#

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章