#!/bin/bash LINES=${1:-100} FORMAT=${2:-apache} MODE=$3 METHODS=("GET" "POST" "PUT" "DELETE" "PATCH") PATHS=("/" "/login" "/dashboard" "/api/data" "/settings" "/products" "/checkout") CODES_OK=(200 201 204 301 302) CODES_ERR=(400 401 403 404 500 503) AGENTS=( "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)" "curl/7.68.0" "PostmanRuntime/7.29.0" "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X)" ) mkdir -p logs random_ip() { echo "$((RANDOM % 256)).$((RANDOM % 256)).$((RANDOM % 256)).$((RANDOM % 256))" } random_date() { date "+%d/%b/%Y:%H:%M:%S %z" } iso_date() { date --iso-8601=seconds } generate_log() { IP=$(random_ip) DATE=$(random_date) ISO_DATE=$(iso_date) METHOD=${METHODS[$RANDOM % ${#METHODS[@]}]} PATH=${PATHS[$RANDOM % ${#PATHS[@]}]} AGENT=${AGENTS[$RANDOM % ${#AGENTS[@]}]} SIZE=$((RANDOM % 5000 + 200)) if (( RANDOM % 10 < 2 )); then CODE=${CODES_ERR[$RANDOM % ${#CODES_ERR[@]}]} FILE="logs/error.log" else CODE=${CODES_OK[$RANDOM % ${#CODES_OK[@]}]} FILE="logs/access.log" fi case "$FORMAT" in apache) LOG="$IP - - [$DATE] \"$METHOD $PATH HTTP/1.1\" $CODE $SIZE \"$AGENT\"" ;; json) LOG="{\"ip\":\"$IP\",\"timestamp\":\"$ISO_DATE\",\"method\":\"$METHOD\",\"path\":\"$PATH\",\"code\":$CODE,\"size\":$SIZE,\"agent\":\"$AGENT\"}" ;; ltsv) LOG="host:$IP time:$ISO_DATE method:$METHOD path:$PATH status:$CODE size:$SIZE agent:$AGENT" ;; custom) LOG="[$ISO_DATE] $IP | $METHOD $PATH => $CODE ($SIZE bytes)" ;; *) echo "Format inconnu : $FORMAT" >&2 exit 1 ;; esac echo "$LOG" >> "$FILE" echo "$LOG" } if [[ "$MODE" == "--loop" ]]; then while true; do generate_log sleep 0.5 done else for ((i=0; i