BG = re.compile(
r'\[BGsender\]\sTIMESTAMP\[[0-9]{11}\]\sSIZE\[[0-9]{4,6}\]$'
, re.S|re.M)
Snap = re.compile(
r'\[Snapsender\]\sTIMESTAMP\[[0-9]{11}\]\sSIZE\[[0-9]{4,6}\]$'
, re.S|re.M)
BgNo =
0
SnapNo =
0
filename = input(
'请输入日志文件名称:'
)
log = open(
'./%s'
%filename)
index =
0
try
:
for
line
in
log:
BGFound = BG.findall(line)
if
BGFound !=
None
and
len(BGFound) !=
0
:
BgNo +=
1
SnapFound = Snap.findall(line)
if
SnapFound !=
None
and
len(SnapFound) !=
0
:
SnapNo +=
1
finally
:
log.close()
imageNo = BgNo + SnapNo
print(f
'一共有: {imageNo} 条传图记录'
)
print(f
'一共有背景图: {BgNo} 张'
)
print(f
'一共有扣图: {SnapNo} 张'
)
更新,增加默认值设定
import re
import os
import time
BgNo = 0
SnapNo = 0
filename = input('请输入日志文件名称\n(不输入则默认为System.log):')
if filename == '':
filename = 'System.log'
date = input('请输入要查询的日期\n使用长格式如 2018-01-01\n不输入则默认为当天:')
if date == '':
date = time.strftime('%Y-%m-%d', time.localtime(time.time()))
hour = input('请输入要查询的具体两位数小时\n如00\n不输入则默认为全天:')
if hour == '':
hour = '[0-9]{2}'
log = open('./%s' %filename)
BG = re.compile(r'\s'+ date + '\s' + hour + ':[0-9]{2}:[0-9]{2}\s\[NOTICE\]\([0-9]{3}\)ms\s-\s\[ovfs_smart\]\s\[\./ovfs_smart_main\.cc\]\s\[BackGroundSender:1103\]\s\sMODULE\[ovfs_smart/main\]\sTYPE\[BGsender\]\sTIMESTAMP\[[0-9]{11}\]\sSIZE\[[0-9]{4,6}\]$', re.S|re.M)
Snap = re.compile(r'\s'+ date + '\s' + hour + ':[0-9]{2}:[0-9]{2}\s\[NOTICE\]\([0-9]{3}\)ms\s-\s\[ovfs_smart\]\s\[\./ovfs_smart_main\.cc\]\s\[SnapSender:1174\]\s\sMODULE\[ovfs_smart/main\]\sTYPE\[Snapsender\]\sTIMESTAMP\[[0-9]{11}\]\sSIZE\[[0-9]{4,6}\]$', re.S|re.M)
try:
for line in log:
BGFound = BG.findall(line)
if BGFound != None and len(BGFound) != 0:
BgNo += 1
SnapFound = Snap.findall(line)
if SnapFound != None and len(SnapFound) != 0:
SnapNo += 1
finally:
log.close()
imageNo = BgNo + SnapNo
print(f'一共有: {imageNo} 条传图记录')
print(f'一共有背景图: {BgNo} 张')
print(f'一共有扣图: {SnapNo} 张')
os.system("pause");
在python3.6 下用pyinstaller打包成exe后的执行效果:
使用python的正则表达式模块分析日志import re#处理文件的正则表达式BG = re.compile(r'\[BGsender\]\sTIMESTAMP\[[0-9]{11}\]\sSIZE\[[0-9]{4,6}\]$', re.S|re.M)Snap = re.compile(r'\[Snapsender\]\sTIMESTAMP\[[0-9]{11}\]\sSIZE\[...
在工作过程中遇到这样一个需求场景,统计查询耗时,由于生产环境没法用来测试,只能从之前的日志信息中获取分析,
日志文件中输出了大量的日志信息。
解决思路是先找到查询的开始点和结束点,然后计算查询耗时。
用到的模块:
re, datetime
注意要使用datetime来计算耗时,datetime要比time强大,可以精确到微秒级别
with open("D...
def regular_expression(self, file, start_value, end_value):
text = re.sub('\s+', '', file)
pattern = ''+start_value+'(.*?)'+end_value
match = re.search(pattern, text)
import re
logline='''192.168.56.1 - - [18/Mar/2019:10:55:04 +0800] \
"POST /zabbix/jsrpc.php?output=json-rpc HTTP/1.1" 200 64 \
"http://192.168...
文章目录Python学习日志目录前言进入正题Python学习日志13课 - 正则表达式基本符号表Python对正则表达式的支持例 题(1).用正则表达式分别验证QQ号和用户名(2).用正则表达式找到所给字符串中所有的数字(3).用正则表达式匹配新闻的标题及链接(4).替换字符串中的不良内容(5).拆分长字符串总结
上次分享了如何使用Python实现办公自动化,基于我们的日常学习工作,它的用处是
服务的链接字符换出错,又没有做日志监控,导致周五、周六、周日的数据更新全部出错,周日的发现了,这个时候错误日志已经达到1.5w条了,当时就崩溃了。。。。
关键是的是,还让其他服务也崩溃了(其他服务也用的这个数据库)。。。因为数据更新不停的尝试更新数据,连接错误数瞬间达到数据库的最大值,数据库不响应了,,,我那个去啊。
迅速改好连接,让服务正常使用。接下来就需要恢复数据了。
把日志拿出
要分析Gerrit日志,可以使用Python的正则表达式模块和日志解析库。
首先,我们需要读取Gerrit服务器的日志文件。可以使用Python内置的`open()`函数来打开日志文件,例如:
```python
with open('/var/log/gerrit/error_log') as f:
log_data = f.read()
接下来,我们可以使用正则表达式模块来提取有用的信息。例如,假设我们要提取所有提交的ID,可以使用以下代码:
```python
import re
commit_regex = re.compile(r'commit ([0-9a-f]{40})')
commits = commit_regex.findall(log_data)
这将在日志数据中查找所有40个字符长的十六进制字符串,并将其存储在`commits`列表中。
如果我们想要更复杂的分析,例如查找特定日期范围内的提交,我们可能需要使用一个更高级的日志解析库。Python中有很多这样的库,例如`apache-log-parser`和`logstash`等。
使用日志解析库,我们可以轻松地将日志数据转换为Python对象,并在其中执行查询。例如,使用`apache-log-parser`,以下代码将提取所有提交日期在2019年1月1日至1月31日期间的提交:
```python
from apache_log_parser import make_parser
from datetime import datetime
parser = make_parser('%t')
commits = []
for line in log_data.splitlines():
parsed_line = parser(line)
commit_date = datetime.strptime(parsed_line['time_received_isoformat'], '%Y-%m-%dT%H:%M:%S.%f')
if commit_date.year == 2019 and commit_date.month == 1:
commits.append(parsed_line['request_url'].split('/')[-1])
这将使用日志解析器将日志数据转换为Python对象,并将所有在2019年1月份提交的提交ID存储在`commits`列表中。
无论你选择使用哪种方法,分析Gerrit日志都需要小心处理敏感信息,例如用户凭据和其他敏感数据。