Python截取Tomcat运行时间超过0.5S的日志

本文介绍了一种在Windows环境下,使用Python脚本快速分析Tomcat日志的方法,旨在帮助运维人员快速定位运行时间过长的请求,提高故障排查效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 实现功能

  1. 环境:winodow10家庭版 python3.7.1
  2. IDE:sublime_text3
  3. 需求:为了满足日常运维需要,快速的分析定位tomcat故障原因。
  4. 使用:将tomcat日志放到桌面后,在脚本尾部填入运行路径,然后运行脚本,会在桌面生成一个txt文档,记录的是Tomcat运行时间超过0.5S的日志。
  5. 注:观察tomcat日志会发现,关于运行时间的语句无规律呈现,所以只能挑选出其中的开头和结尾的标志语句,具体错误内容无法截取出,查看时,可复制截取出的标志语句放入总日志中进行搜索,即可看到错误内容。

二. 思路

  1. 导入模块
  2. 建立自建函数
  3. 逐行读取日志文件,遍历,先读取带有运行时间的行。
  4. 将读取的信息导入f1
  5. f1再进行区分大于0.5s的日志
  6. 再将第二次过滤的日志导入f2
  7. f2就是需要的最终日志

三. 代码

import re
import os
def time_log(logname):
  f1=open(logname,enconding='utf-8')#f = open(logname,encoding='gbk')
  my1=[]
  for a in f1:
  	b=re.search('open in',a,re.IGNORECASE)
  	c=re.search('closed after',a,re.IGNORECASE)
  	if b or c:
  		log_str=a
  		my.append(log_str)
  path='C://Users//user//Desktop'
  time1_path=os.path.join(path,'tt.log')
  f2=open(time1_path,'w')
  f2=writeline(my1)
  f1.close()
  f2.close()
  f2=open(time1_path,'r')
  my2=[]
  for d in f2:
  	e=f2.spilt(' ')
  	num=int(e[-2])
  	if num>500:
  		my2.append(num)
  time2_path=os.path.join(path,'time')
  f3=open(time2_path,'w')
  f3.writeline(my2)
  f3.fluse()
  f3.close()
  f2.close()
  return 0

time_log(C://Users//user//Desktop) #要抓取的日志目录

四. 代码详解

  1. def 函数名称 (函数内变量)def自建函数
  2. open(文件名称,打开方式)
    (1)read
    r     以只读方式打开,默认。
    rb   以二进制格式只读方式打开,默认。
    r+   打开一个文件用于读写,文件指针会放在开头。
    rb+ 以二进制方式打开一个文件用于读写
    (2)write
    w     以写入方式打开,如果原文件存在则打开文件,从头开始编辑,即原有内容会被覆盖,如果原文件不存在,则创建新文件。
    wb   以二进制格式写入方式打开,如果原文件存在则打开文件,从头开始编辑,即原有内容会被覆盖,如果原文件不存在,则创建新文件。
    w+   打开一个文件用于读写,如果原文件存在则打开文件,从头开始编辑,即原有内容会被覆盖,如果原文件不存在,则创建新文件。
    wb+ 以二进制方式打开一个文件用于读写,如果原文件存在则打开文件,从头开始编辑,即原有内容会被覆盖,如果原文件不存在,则创建新文件。
    (3)append 追加
    a     打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    ab   以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    a+    打开一个文件用于读写追加。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
    ab+ 以二进制格式打开一个文件用于读写追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
  3. Python中的for循环有遍历作用,可以将f1中所以数据遍历,Python脚本中在文件中搜寻相关字符等都会用到for的遍历功能。
  4. b=re.search('open in',a,re.IGNORECASE)
    在文件的每一行中寻找,带有 ‘open in’ 字符的行,如果寻找到,那就返回行,re.IGNORECASE表示不区分大小写。
  5. append() 此时的log_str等于a,等于所有符合该字符的行数,把他添加到my.这个列表中。
  6. os.path.join()用于文件拼接路径,会将其中的path1和path2拼接起来,形成新的路径。
  7. open()和close() 相呼应,打开后必须得关闭,否则脚本会出错,而其中的打开方式可以参考第二条Write和Read的意义。
  8. write()writelines区别:write()需要传入一个字符串做为参数,否则会报错,而writelines()既可以传入字符串又可以传入一个字符序列,并将该字符序列写入文件
    注意 :writelines必须传入的是字符序列,不能是数字序列
    如:list_1023 = [1,2,3,4,5]
  9. spilt(' ')通过指定分隔符对字符串进行切片。
    spilt(‘str’,num) str指分隔符,num指分成几块,默认值是-1(全部分割) ,例:my.spilt(’ ',1),指以空格为分割符,1是分割一次,也就分割成两个。
  10. num=int(e[-2])int()是转化为字符,防止报错。e[-2],就是把分割成的命名为e然后取倒数第二个字符。
  11. return是返回。程序遇到return即返回,退出def模块,也不会再运行第二个return。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值