from flask import Flask, render_template, request, redirect, url_for import logging from datetime import datetime app = Flask(__name__) # Set up custom logging logging.basicConfig(level=logging.DEBUG) # Remove werkzeug logs by setting its logger to a higher level (e.g., ERROR) werkzeug_logger = logging.getLogger('werkzeug') werkzeug_logger.setLevel(logging.ERROR) # Log client IP before each request @app.before_request def log_client_ip(): # Get client IP address from X-Forwarded-For header or remote_addr client_ip = request.headers.get('X-Forwarded-For', request.remote_addr) client_ip = client_ip.split(',')[0] # Get the first IP if it's a forwarded request # Override werkzeug's default logging to show client IP in the access log @app.after_request def log_request(response): client_ip = request.headers.get('X-Forwarded-For', request.remote_addr) client_ip = client_ip.split(',')[0] # Get the first IP if it's a forwarded request app.logger.info(f"{client_ip} - - [{request.date}] \"{request.method} {request.full_path} {request.environ.get('SERVER_PROTOCOL')}\" {response.status_code}") return response @app.route('/') def home(): greeting = "Hello, Python!" current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') return render_template('home.html', greeting=greeting, current_time=current_time) @app.route('/about') def about(): return render_template('about.html') # Always redirect back home @app.errorhandler(404) def default_page(e): return redirect(url_for('home')) if __name__ == "__main__": app.run(debug=True, host="0.0.0.0", port=5005)