4
4
# Regular expressions for parsing the Apache Combined Log Format
5
5
log_pattern = r'^(\S+) (\S+) (\S+) \[([\w:/]+\s[+\-]\d{4})\] "(\S+)\s?(\S+)?\s?(\S+)?" (\d{3}) (\d+|-)'
6
6
7
+
7
8
def parse_log (log_file_path ):
8
9
with open (log_file_path , 'r' ) as log_file :
9
10
for line in log_file :
10
11
match = re .match (log_pattern , line )
11
12
if match :
12
13
yield match .groups ()
13
14
15
+
14
16
def analyze_logs (log_file_path ):
15
17
# Initialize counters and sets to store information
16
18
total_requests = 0
@@ -31,17 +33,19 @@ def analyze_logs(log_file_path):
31
33
32
34
return total_requests , len (unique_visitors ), page_visits , status_codes , potential_threats
33
35
36
+
34
37
if __name__ == "__main__" :
35
38
log_file_path = "path/to/your/log/file.log"
36
39
37
- total_requests , unique_visitors , page_visits , status_codes , potential_threats = analyze_logs (log_file_path )
40
+ total_requests , unique_visitors , page_visits , status_codes , potential_threats = analyze_logs (
41
+ log_file_path )
38
42
39
43
print (f"Total Requests: { total_requests } " )
40
44
print (f"Unique Visitors: { unique_visitors } " )
41
45
print ("\n Popular Pages:" )
42
46
for page , count in page_visits .most_common (10 ):
43
47
print (f"{ page } : { count } visits" )
44
-
48
+
45
49
print ("\n Status Codes:" )
46
50
for code , count in status_codes .items ():
47
51
print (f"Status Code { code } : { count } occurrences" )
0 commit comments