import re
def compare_log_entries(log_file, expected_values):
"""
Compares log entries from a file against expected values.
Args:
log_file (str): Path to the log file.
expected_values (dict): A dictionary where keys are log entry patterns
(regex) and values are the expected values.
Returns:
list: A list of discrepancies found. Empty list if no discrepancies.
"""
discrepancies = []
try:
with open(log_file, 'r') as f:
for line in f:
for pattern, expected in expected_values.items():
match = re.search(pattern, line)
if match:
actual = match.group(1) # Assuming the value is in group 1
if actual != str(expected): #Compare as strings.
discrepancies.append({
'line': line.strip(),
'pattern': pattern,
'expected': expected,
'actual': actual
})
except FileNotFoundError:
print(f"Error: Log file not found: {log_file}")
return None
return discrepancies
if __name__ == '__main__':
# Example Usage
log_file = 'non_production.log'
expected_values = {
r'User logged in: (.*)': 'testuser',
r'Request processed: (.*)': 'GET /api/data',
r'Error: (.*)': 'Invalid input'
}
# Create a dummy log file for testing
with open(log_file, 'w') as f:
f.write("User logged in: adminuser\n")
f.write("Request processed: POST /api/submit\n")
f.write("Error: Permission denied\n")
f.write("User logged in: testuser\n")
f.write("Request processed: GET /api/data\n")
discrepancies = compare_log_entries(log_file, expected_values)
if discrepancies:
print("Discrepancies found:")
for diff in discrepancies:
print(f" Line: {diff['line']}")
print(f" Pattern: {diff['pattern']}")
print(f" Expected: {diff['expected']}")
print(f" Actual: {diff['actual']}")
print("-" * 20)
else:
print("No discrepancies found.")
Add your comment