Comment définir un format de journal personnalisé pour nginx, afin que la requête soit analysée et que ses parties soient journalisées séparément?
Nous servons un fichier image pour compter le courrier ouvert. L’URL de l’image varie, mais suit la règle:
http://img.zgserver.com/logging/dailymail.gif
XXXXX – identifiant de la campagne par email; AAAA – Identifiant du destinataire.
Il y a un journal séparé pour /counter
emplacement, que je voudrais donner un format comme
XXXXX YYYYY DATETIME
La section de localisation ressemble à
location ~* ^counter/([0-9]+)/([^/]+)/dailymail\.gif$ { access_log /var/log/mailopened.log alias /var/www/site.com/1x1.gif?cid=$1&uid=$2&type=daily; }
J’ai donc les valeurs dans les variables $ 1 et $ 2. Comment puis-je les utiliser dans le format de journal?
log_format
directive log_format
est autorisée uniquement au niveau http
, vous devez donc la définir en fonction d’autres variables, par exemple
http { log_format tracking "$xxxx $yyyy $time_local";
Plus tard, dans votre région, définissez simplement ces variables et connectez-vous au format de tracking
:
location ~* ^counter/([0-9]+)/([^/]+)/dailymail\.gif$ { set $xxxx $1; set $yyyy $2; access_log /var/log/mailopened.log tracking; alias /var/www/site.com/1x1.gif?cid=$1&uid=$2&type=daily; }
Avec les versions récentes de la librairie Nginx et PCRE, il est possible d’omettre les appels set
et de nommer explicitement les captures dans l’ location
(grâce à @kolbyjack):
location ~* ^counter/(?[0-9]+)/(?[^/]+)/dailymail\.gif$ { access_log /var/log/mailopened.log tracking; alias /var/www/site.com/1x1.gif?cid=$1&uid=$2&type=daily; }