Sto inviando alcune tracce di stack piuttosto lunghe al log degli errori di apache usando "error_log()" di php e le voci vengono troncate. Non ho trovato un modo per rendere le voci più lunghe. Qualche idea?Come rendere più lunghe le voci del registro degli errori di Apache
risposta
ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M"
Questa configurazione ruoterà file di log di errore quando si raggiunge una dimensione di 5 megabyte, e il suffisso al nome del file di registro viene creato nella forma errorlog.YYYY-mm-dd-hh_mm_ss.
Per la documentazione ufficiale più leggere da apache.org Link Here
Il limite predefinito della lunghezza massima del messaggio di errore che passa attraverso error_log() è 1024 byte.
Informazioni dettagliate ci http://www.php.net/manual/en/errorfunc.configuration.php#ini.log-errors-max-len
Leggendo la domanda di cui sopra mi ha fatto chiedo se il problema è all'interno di Apache. Sì, il troncamento si verifica all'interno di PHP perché Apache consente anche oltre 10.000 caratteri. Ecco uno script Perl valutare la capacità di Apache di inviare messaggi di errore lunghi nel suo registro:
#!/usr/bin/perl -w
#
# Test error log length limitations
# Result: no limitation
#
#
use strict;
use CGI;
my $query = CGI->new;
print $query->header;
print "<html><body>You have reached "
."cgi-bin/admin/test_error_log.pl"
."</body></html>\n";
print STDERR "This is an error message from $0\n";
print STDERR "
[Above should be a blank line] here is a multiline error message
here is the third and final line of it\n";
print STDERR 'abcde' x 200; #1,000 characters
print STDERR "\nAbove is 1,000 characters of output of 'abcde'\n";
print STDERR 'vwxyz' x 2000; #10,000 characters
print STDERR "\nAbove is 10,000 characters of output of 'vwxyz'\n";
Ho lo stesso problema con Nginx. –
PHP Manual dice sulle impostazioni log_errors_max_len
in php.ini:
Impostare la lunghezza massima di log_errors in byte . (...) L'impostazione predefinita è 1024 e 0 consente di non applicare alcuna lunghezza massima.
Alcuni suggeriscono che si può cambiare facendo ad esempio:
ini_set("log_errors_max_len", 2048);
ma il manuale aggiunge:
Questa lunghezza viene applicata a errori registrati, visualizzati gli errori e anche per $ php_errormsg, ma non per chiamare esplicitamente funzioni come error_log().
Sto cercando di trovare una soluzione. Modificherà se lo faccio.
Come Leopoldo said, l'impostazione log_errors_max_len
sembra piuttosto inutile in questa situazione, e il manuale PHP lo afferma chiaramente.
L'unica soluzione sono stato in grado di trovare finora è quello di utilizzare:
error_log("Long error message...", 3, CUSTOM_LOG_FILE);
Il secondo parametro di error_log()
consente di reindirizzare messaggio in un file personalizzato. Pertanto, l'ultimo parametro dovrebbe essere un percorso per un file di registro personalizzato.
In questo modo ricevo il messaggio di errore completo e, cosa potrebbe essere più importante per qualcuno, i caratteri non ASCII sono chiaramente leggibili lì (non è sicuro, potrebbe essere il mio male, ma quando li registro con il registro standard file - ottengo cose come \xd0\xbf
).
-1 Non sono sicuro del motivo per cui questa è una risposta accettata.Questo non farà nulla per prevenire il troncamento delle singole voci nel registro. –
Questo troncherà effettivamente i registri lunghi perché è limitato dal limite della lunghezza del tubo del sistema operativo. –