1. import re
  2. import argparse
  3. import os
  4. def extract_log_values(log_file, patterns):
  5. """
  6. Extracts values from a log file based on provided regular expression patterns.
  7. Args:
  8. log_file (str): Path to the log file.
  9. patterns (dict): A dictionary where keys are pattern names and values are
  10. regular expression patterns.
  11. Returns:
  12. dict: A dictionary where keys are pattern names and values are lists of
  13. extracted values. Returns an empty dictionary if the file
  14. doesn't exist.
  15. """
  16. results = {}
  17. try:
  18. with open(log_file, 'r') as f:
  19. log_content = f.read()
  20. except FileNotFoundError:
  21. return {}
  22. for pattern_name, pattern in patterns.items():
  23. matches = re.findall(pattern, log_content)
  24. results[pattern_name] = matches
  25. return results
  26. def main():
  27. parser = argparse.ArgumentParser(description='Extract values from log files.')
  28. parser.add_argument('log_file', help='Path to the log file.')
  29. 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"')
  30. args = parser.parse_args()
  31. patterns = {}
  32. if args.patterns:
  33. for pattern_str in args.patterns:
  34. try:
  35. name, pattern = pattern_str.split(':', 1)
  36. patterns[name] = pattern
  37. except ValueError:
  38. print(f"Invalid pattern format: {pattern_str}. Use pattern_name:pattern")
  39. return
  40. results = extract_log_values(args.log_file, patterns)
  41. for pattern_name, values in results.items():
  42. print(f"Pattern: {pattern_name}")
  43. for value in values:
  44. print(value)
  45. print("-" * 20)
  46. if __name__ == "__main__":
  47. main()

Add your comment