Frage Wie man die Variable in nginx log zum Debuggen ausgibt


Ich teste nginx und möchte Variablen in die Log-Dateien ausgeben. Wie kann ich das machen und welche Log-Datei wird es gehen (Zugriff oder Fehler).


63
2017-07-04 05:29


Ursprung




Antworten:


Sie können nginx-Variablenwerte über Header senden. Praktisch für die Entwicklung.

add_header X-uri "$uri";

und Sie werden in den Antwortheadern Ihres Browsers sehen:

X-uri:/index.php

Manchmal mache ich das während der lokalen Entwicklung.

Es ist auch praktisch, Ihnen mitzuteilen, ob ein Unterabschnitt ausgeführt wird oder nicht. Streuen Sie es einfach in Ihre Klauseln, um zu sehen, ob sie verwendet werden.

location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)$ {
    add_header X-debug-message "A static file was served" always;
    ...
}

location ~ \.php$ {
    add_header X-debug-message "A php file was used" always;
    ...
}

Also eine URL besuchen http://www.beispiel.de/index.php wird den letzten Header während des Besuchs auslösen http://www.example.com/img/my-ducky.png wird den ehemaligen Header auslösen.


118
2018-03-08 19:58



Beachten Sie, dass add_header wird funktionieren nur bei erfolgreichen Anfragen. Die Dokumentation besagt, dass sie nur auf Antworten mit den Codes 200, 204, 301, 302 oder 304 angewendet werden kann. Daher kann sie nicht zum Debuggen von HTTP-Fehlern verwendet werden. - John WH Smith
Ah, das ist Genie! Vielen Dank! - L0j1k
@JohnWHSmith: Wie Marat in angemerkt hat diese Antwort. Ab Version 1.7.5, nginx hat ein hinzugefügt Parameter "immer" zu add_header was den Header zurückgibt, egal was der Antwortcode ist. Also zum Beispiel add_header X-debug-message "A php file was used" always;, sollte sogar für 500 Fehlercode funktionieren. - yuvilio
Wahrer Held. Rettete mein Leben - Bernardo Vale
Dies beantwortet die Frage überhaupt nicht. Der Typ möchte sich einloggen Logdatei nicht für den Kunden. - Avamander


Sie können eine einfache Zeichenfolge als HTTP-Antwort zurückgeben:

location /
{
    return 200 $document_root;
}

29
2018-02-21 17:39



Was ist, wenn Sie zwei Variablenwerte zurückgeben möchten? - BringBackCommodore64
Wenn Sie zum Speicherort wechseln, wird sofort der Dialog "Speichern unter" meines Browsers geöffnet (getestet mit Opera, Chromium). Keine Antwort. - BringBackCommodore64


Sie können ein benutzerdefiniertes Zugriffsprotokollformat mithilfe von log_format Anweisung, die die Variablen protokolliert, an denen Sie interessiert sind.


15
2017-07-04 05:35



danke, und ich denke, es gibt keinen einfacheren Weg, eine Variable selbst auszugeben? - lulalala
@lulalala Nicht, dass ich davon weiß. - mgorven
Es ist möglich, die Protokollstufe in der Direktive zu setzen error_log zu debug Sie können also den Wert der Variablen und des Blocks sehen, die ausgeführt werden. Beispiel error_log file.log debug - Victor Aguilar
Beachten Sie, dass leere Variablen als angezeigt werden - im log, aber sind wirklich leer in der nginx code, sollten sie nicht überprüfen - jederzeit. Dies verwirrt manchmal die Benutzer. - higuita


Eine andere Möglichkeit ist es einzuschließen das Echo-Modul wenn Sie nginx bauen oder installieren OpenResty Das ist Nginx gebündelt mit einer Reihe von Erweiterungen (wie Echo.)

Dann können Sie einfach Ihre Konfiguration mit folgenden Aussagen versehen:

echo "args: $args"

6
2017-11-21 22:30



Wenn ich dies versuche, wird eine einfache Textdatei auf dem Server angezeigt, die die Ausgabe der aktuellen Seite unterbricht. - JaredMcAteer
Da ist ein echo_log Richtlinie in Entwicklung. - Gajus