一 前言
這個腳本不夠健壯,只是我個人使用,處理一些大數據的業務。分享給大家,不要亂玩,會玩壞的。。。大家看看思路就好了。
該腳本將輸出今天的log文件內容。如果log文件是今日新建的,日誌內容將會放在裏面。如果不是,就會將存儲位置下的.log文件打成 .tar.gz 包。同時以當日時間作爲log文件的名稱(前綴程序會給你補上),再放入log日誌內容,最後存儲在用戶輸入的路徑下。
處理場景:每天某文件夾下有大量的log日誌文件輸出。該腳本可以在命令行調用,輸出log日誌,壓縮log日誌。
注意:某個位置下,必須有一個“前綴-xxxx-xx-xx.log”文件【前綴是指你輸入的log文件的前綴,xxxx-xx-xx是指年月日】。否則,程序必然崩潰(我沒有寫判斷)。
使用方法:(我的腳本是logPut.py文件)命令行輸入: python logPut.py -d log日誌的存儲路徑 -f log日誌文件名的前綴 -c log日誌的內容
二 代碼
# -*- coding: utf-8 -*-
import sys
import getopt
import tarfile
import time
import re
import glob
import os
#幫助函數
def helping():
print sys.argv[0]+"-d 路徑 -f 文件名前綴 -c log日誌內容"
print sys.argv[0] +"-h 獲取幫助文檔"
#壓縮log文件函數
def tar(fname):
t = tarfile.open(fname + ".tar.gz", "w:gz")
p,f=os.path.split(fname)
os.chdir(p)
t.add(f)
t.close()
print "腳本名:", sys.argv[0]
#for i in range(1, len(sys.argv)):
#print "參數", i, sys.argv[i]
#hd:f:c: ,表示命令的開頭,h:幫助 ,d:log文件存儲路徑,f:log文件的前綴,c:log文件的內容
opts, args = getopt.getopt(sys.argv[1:], "hd:f:c:")
#獲取的變量內容,定義
path=""
filePrefix=""
content=""
#循環對變量進行賦值
for op, value in opts:
if op == "-d":
path = value
elif op == "-f":
filePrefix = value
elif op == "-c":
content = value
elif op == "-h":
helping()
sys.exit()
#時間模塊,用於給log文件添加時間
#設置時間格式
ISOTIMEFORMAT="%Y-%m-%d"
timeNow = time.strftime(ISOTIMEFORMAT, time.localtime())
#Mac下的路徑:/Users/tanishindaira/Desktop,Windows平臺下,路徑是不同的
#通過字符串拼接,確定存儲位置和文件名稱
fileName = path+"/"+filePrefix+"-"+timeNow+".log"
#切割文件名,獲取時間
filesNameSplit = path+r"/cms-*.log"
list = glob.glob(filesNameSplit)
cont=""
for i in list:
baseName = os.path.basename(i)
cont += os.path.basename(i)
cut = re.split(r'(\W+)',cont)
#print cut
timeOld = cut[2]+cut[4]+cut[6]
#print timeOld
#切割當前系統時間
cut1 = re.split(r'(\W+)',timeNow)
timeNowSplit = cut1[0]+cut1[2]+cut1[4]
#print timeNowSplit
#判斷時間,相等則寫在當前文件內,不相等則單獨寫在新的文件內
if timeOld == timeNowSplit:
#寫在當前文件
f = file(fileName,"a")
f.write(content+"\n")
f.close
else:
#寫在新文件裏面
f = file(fileName,"a")
f.write(content+"\n")
f.close
#將舊的log文件打包tar
fileNameNew = path+"/"+cont
tar(fileNameNew)
#刪除舊的文件
if os.path.exists(fileNameNew):
os.remove(fileNameNew)
#輸出結果
print "程序執行成功"
print path
print filePrefix
print content