保存在www目录里面的wwwlogs文件夹,.log文件名的名字就是网站名字,有运行日志和错误日志。
这段代码可以分析服务器日志,统计IP访问,自用可能要修改,因为每个服务器系统生成的日志格式可能不一样.
import re
from collections import defaultdict
def analyze_access_log(logfile):
ip_count = defaultdict(int) # 统计IP地址出现次数
status_count = defaultdict(int) # 统计HTTP状态码出现次数
method_count = defaultdict(int) # 统计请求方法出现次数
referer_count = defaultdict(int) # 统计引荐网址出现次数
daily_ip_count = defaultdict(set) # 统计每天的IP地址集合
with open(logfile, 'r', encoding='utf-8') as f:
for line in f:
m = re.match(r'^([\d\.]+) .* "(GET|POST|PUT|DELETE)\s.*" (\d+) \d+ "(.*?)"', line)
if m:
ip_address = m.group(1)
request_method = m.group(2)
http_status_code = m.group(3)
referer_url = m.group(4).strip()
ip_count[ip_address] += 1
status_count[http_status_code] += 1
method_count[request_method] += 1
referer_count[referer_url] += 1
time_m = re.search(r'\[(\d{2}/\w{3}/\d{4})', line)
if time_m:
access_time_str = time_m.group(1) # 获取访问日期(格式为 dd/mmm/yyyy)
key = '-'.join(access_time_str.split('/')[::-1]) # 将日期格式转化为 yyyy-mm-dd,方便排序和输出结果
daily_ip_count[key].add(ip_address)
result = {
'ip_count': dict(ip_count),
'status_count': dict(status_count),
'method_count': dict(method_count),
'referer_count': dict(referer_count),
'daily_ip_count': {k: len(v) for k, v in daily_ip_count.items()} # 统计每日独立 IP 数量
}
return result
logfile = 'access.log' # 修改为实际的日志文件路径
result = analyze_access_log(logfile)
# 打印统计结果
for k, v in result.items():
print(k + ':', v)