python 日誌排序

需求:
對於:sss.log,sss.log.1,sss.log.2,sss.log.3…sss.log.10
這種滾動的日誌需要按照日誌的生成的順序進行讀取的時候,需要對這些日誌進行一個排序,然後依照sss.log.10…sss.log.3,sss.log.2,sss.log.1,sss.log
的順序進行分別的讀取,因爲按照log4j的日誌滾動規則,數字越大的,證明日誌的生成時間約早。

python代碼:

def get_orders_file(file_names):
    file_names.sort(key=lambda fn: int(fn[fn.index('sss.log.'):].replace('sss.log',"")) if not fn.endswith('canary.log') else 0,reverse=True)  # 按時間排序
    return file_names

file_names爲文件名字的列表集合,是文件在linux中的絕對路徑,類似於a/b/c/sss.log.10這種,也可以是簡單的文件名字的列表集合。
基本的原理就是利用 python自己的sort函數進行list的排序,用lambda函數定義排序的規則,如果是帶有數字標識的,截取出數字字符串,同時轉化成數字,如果是沒有數字標識的日誌,類似於sss.log,就返回0,因爲sss.log是最新的日誌文件。

返回的列表就是排序後的結果:
sss.log.10
sss.log.9

sss.log.1
sss.log

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