import re
import argparse
import os
def extract_log_values(log_file, patterns):
"""
Extracts values from a log file based on provided regular expression patterns.
Args:
log_file (str): Path to the log file.
patterns (dict): A dictionary where keys are pattern names and values are
regular expression patterns.
Returns:
dict: A dictionary where keys are pattern names and values are lists of
extracted values. Returns an empty dictionary if the file
doesn't exist.
"""
results = {}
try:
with open(log_file, 'r') as f:
log_content = f.read()
except FileNotFoundError:
return {}
for pattern_name, pattern in patterns.items():
matches = re.findall(pattern, log_content)
results[pattern_name] = matches
return results
def main():
parser = argparse.ArgumentParser(description='Extract values from log files.')
parser.add_argument('log_file', help='Path to the log file.')
parser.add_argument('--patterns', nargs='+', help='List of patterns to extract (pattern_name:pattern). Example: --patterns "timestamp:\\d{4}-\\d{2}-\\d{2}" "level:ERROR"')
args = parser.parse_args()
patterns = {}
if args.patterns:
for pattern_str in args.patterns:
try:
name, pattern = pattern_str.split(':', 1)
patterns[name] = pattern
except ValueError:
print(f"Invalid pattern format: {pattern_str}. Use pattern_name:pattern")
return
results = extract_log_values(args.log_file, patterns)
for pattern_name, values in results.items():
print(f"Pattern: {pattern_name}")
for value in values:
print(value)
print("-" * 20)
if __name__ == "__main__":
main()
Add your comment