需求:
对于: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