New paste Repaste Download
#!/usr/bin/env python3
import re
from datetime import datetime
import sys
import argparse
from pathlib import Path
def convert_nginx_date(nginx_date):
    """Convert Nginx date format to ISO8601."""
    try:
        # Parse typical Nginx date format: 10/Oct/2023:13:55:36 +0000
        dt = datetime.strptime(nginx_date, '%d/%b/%Y:%H:%M:%S %z')
        return dt.isoformat()
    except ValueError as e:
        return nginx_date  # Return original if parsing fails
def process_log_file(input_file, output_file):
    """Process Nginx log file and convert timestamps to ISO8601."""
    # Match Nginx log timestamp format within square brackets
    timestamp_pattern = r'\[(.*?)\]'
    
    with open(input_file, 'r') as infile, open(output_file, 'w') as outfile:
        for line in infile:
            # Find and replace timestamps
            def replace_timestamp(match):
                timestamp = match.group(1)
                iso_timestamp = convert_nginx_date(timestamp)
                return f'[{iso_timestamp}]'
            
            # Replace timestamps while preserving the rest of the line
            new_line = re.sub(timestamp_pattern, replace_timestamp, line)
            outfile.write(new_line)
def main():
    parser = argparse.ArgumentParser(description='Convert Nginx log timestamps to ISO8601 format')
    parser.add_argument('input_file', type=str, help='Input log file path')
    parser.add_argument('-o', '--output', type=str, help='Output file path (default: input_file.iso8601)')
    
    args = parser.parse_args()
    
    input_path = Path(args.input_file)
    if not input_path.exists():
        print(f"Error: Input file '{args.input_file}' not found")
        sys.exit(1)
    
    # Generate output filename if not specified
    output_file = args.output if args.output else f"{input_path}.iso8601"
    
    try:
        process_log_file(args.input_file, output_file)
        print(f"Successfully converted timestamps in '{args.input_file}'")
        print(f"Output written to '{output_file}'")
    except Exception as e:
        print(f"Error processing file: {e}")
        sys.exit(1)
if __name__ == "__main__":
    main()
Filename: None. Size: 2kb. View raw, , hex, or download this file.

This paste expires on 2024-11-23 17:25:26.113303. Pasted through web.