Wie deaktiviere ich die Nginx-Protokollierung?

27

Ich habe folgendes in der config datei

server {
    listen       80;
    server_name  _;
    access_log  /var/log/nginx/access.log  main;
  ...

server {
    listen       80;
    server_name  example.com
    access_log  off;
    error_log off;

Es wird jedoch weiterhin für den example.comvirtuellen Host protokolliert . Was mache ich falsch?

user965363
quelle
Was beabsichtigen Sie hier zu tun?
Evan Carroll
Ich habe diese Frage zum Entfernen vorgemerkt, da die am meisten aufgerufene Antwort mit Ihrem Syntaxfehler zu tun hat. Es hat nichts mit dem Deaktivieren der Fehlerprotokollierung zu tun. Es gibt keine durchsuchbaren Fehlermeldungen und ich bin nicht sicher, was Sie fragen oder warum die angegebenen Antworten Ihr Problem nicht lösen.
Evan Carroll

Antworten:

31

Sie fehlen ;nach der Anweisung Servername. access_logund offwerden als zusätzliche Servernamen behandelt.

Wohnmobile
quelle
12
Außerdem error_log off; deaktiviert die Fehlerprotokollierung nicht. Es werden nur Fehler in einer Datei mit dem Namen "off" protokolliert. Es gibt keine Möglichkeit, die Fehlerprotokollierung vollständig zu deaktivieren. Der nächstmögliche Wert ist error_log / dev / null crit. Das ist fast das gleiche, da kein Fehlerprotokoll angezeigt wird.
Kolbyjack
6
Tatsächlich access_log off;bewirkt dies, dass Nginx das Protokoll in die aufgerufene Datei schreibt off. Das ist also nicht die richtige Antwort.
user965363
4
Eigentlich ist das die richtige Antwort. "Wenn Sie" off "als einzigen Parameter verwenden, werden alle access_log-Anweisungen für die aktuelle Ebene gelöscht ": wiki.nginx.org/HttpLogModule#access_log . Es ist nicht wahr für error_log (wie von @kolbyjack hinzugefügt), aber ich glaube, die Frage betraf den Zugriff, nicht das Fehlerprotokoll. Es ist möglich, dass einige sehr alte Versionen von Nginx dies nicht unterstützen.
rvs
Gibt es einen Vorteil, offanstatt zu verwenden /dev/null? Wenn offeinige Versionen von Nginx in eine Datei mit dem Namen schreiben off, /dev/nullscheint dies eine universellere Lösung zu sein.
Joe Mornin
20

Natürlich können Sie die Protokollierung vollständig deaktivieren. Zeigen Sie einfach die Protokolldateien auf / dev / null und fertig. ;)

access_log  /dev/null;
error_log /dev/null;
Franz Bettag
quelle
3
Ich benutze diesen auch; /dev/nullist ein echtes Ziel; während "off" eine datei in einem verzeichnis ist
edoceo 13.12.15
4
Dies ist nicht die offizielle empfohlene Vorgehensweise. "Aus" ist der richtige Weg.
user1751825
Ich habe es / var / null gemacht und jetzt werden die Protokolle in der Datei "null" im var-Verzeichnis gespeichert. Sollte es nur "/ dev / null" sein?
Gaurav
13

können Sie deaktivieren , access_logindem Sie

access_log off;

Wenn Sie jedoch error_log deaktivieren möchten, verwenden Sie die error_log-Option nicht in Ihrer conf.

Mustafa Özgür
quelle
2
Wie ergänzt dies die früheren Antworten?
Dave M
1
Cuz, vorherige Antwort ist unbrauchbar! Verwenden Sie das nicht
Mustafa Özgür
2
Wenn die Konfiguration keine error_log-Option enthält, lautet die Standardeinstellung von nginx "error_log logs / error.log error": nginx.org/en/docs/ngx_core_module.html#error_log
Julian Ladisch
Ja Mann, das stimmt. Also, sollten wir / dev / null oder etwas anderes? Was ist dein Vorschlag?
Mustafa Özgür
Diese Antwort ist falsch, da hierdurch eine Protokolldatei '/ usr / share / nginx / off' erstellt wird
DanielKhan
1

Es sollte ziemlich einfach sein, Sie könnten die Protokollzeilen auskommentieren

server {
    listen       80;
    server_name  _;
    #access_log  /var/log/nginx/access.log  main;
  ...

server {
    listen       80;
    server_name  example.com
    #access_log  off;
    #error_log off;

und wenn du einen kritischen Fehler bekommst, solltest du es so machen: ´error_log / dev / null crit; ´ so wird es sein:

server {
    listen       80;
    server_name  _;
    access_log  /dev/null crit;
  ...

server {
    listen       80;
    server_name  example.com
    access_log  /dev/null crit;
    error_log /dev/null crit;
Daniel Guldberg Aaes
quelle
Verwenden Sie nicht 'off'. Wie unten erwähnt, erstellt dies eine Protokolldatei mit dem Namen 'off' im Home-Verzeichnis von nginx.
Daniel Khan
0

Basiert auf der bedingten Protokollierung im Nginx-Beitrag, verwendet jedoch keine Variable, um zu bestimmen, ob die Anforderung protokolliert werden soll, sondern nur den konstanten Wert 0.

server {
listen       80;
server_name  _;
access_log  /var/log/nginx/access.log  main;
}

server {
listen       80;
server_name  example.com
access_log  /var/log/nginx/access.log if=0;
error_log /var/log/nginx/error.log if=0;
}
Aaron
quelle