File di log personalizzato

perseoclub

Utente Attivo
28 Nov 2015
91
0
6
Ciao a tutti,

sto usando questo script per tracciare gli errori/messaggi del mio server apache

PHP:
error_reporting(E_ALL);
ini_set("display_errors", 1);
ini_set("display_startup_errors", 1);
ini_set("track_errors", 1);
ini_set("log_errors", 1);
ini_set("error_log", __DIR__ . "/log/my_log.log");
ini_set("log_errors_max_len", 0);

Io vorrei importare questo script in ogni pagina php (anziché copiarlo ogni volta), ma:

- se importo lo script in ogni pagina php, usando include/require, lo script non ha effetti.. e gli errori vengono memorizzati nel file error log nativo di apache (uso linux.. quindi in /var/log/apache2/error.log),
- mentre se copio lo script ad inizio di ogni pagina php ottengo il risultato voluto (cioè gli errori/messaggi nel file mio "my_log.log").

Dove sbaglio?
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
ciao
scusa ma vorrei provare a leggere il manuale php con te (solo ini_set),
pensando al sito in "produzione"

-----
error_reporting(E_ALL);

-----
ini_set("display_errors", 1);
This determines whether errors should be printed to the screen as part of the output
or if they should be hidden from the user.

sono dell'idea che l'utente del sito non debba vedere i possibili errori (FALSE),
ma, dopo la loro intercettazione, devono essere adeguatamente gestiti,
quando un errore è incorreggibile,
mi scuso con l'utente, avverto l'amministratore in qualche modo ed interrompo l'esecuzione

-----
ini_set("display_startup_errors", 1);
Even when display_errors is on, errors that occur during PHP's startup sequence are not displayed.
It's strongly recommended to keep display_startup_errors off, except for debugging.

mi rimetto al manuale e, fermamente, accetto la sua raccomandazione

-----
ini_set("track_errors", 1);
If enabled, the last error message will always be present in the variable $php_errormsg.

non credo sia importante, di solito gli errori che si verificano "in produzione" devono essere immediatamente gestiti,
vedi errori "provenienti" dal db, ma dipende da come sono sviluppati gli script

-----
ini_set("log_errors", 1);
Tells whether script error messages should be logged to the server's error log or error_log.
This option is thus server-specific.

ok (true) per avere il log in un proprio file e non in quello di sistema

-----
ini_set("error_log", __DIR__ . "/log/my_log.log");
Name of the file where script errors should be logged.
The file should be writable by the web server's user. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

ho aggiunto io i punti esclamativi, per evidenziare che,
non solo il file deve essere "writable by the web server's user" ma lo deve essere anche la "dir" che lo contiene ovvero "log"
e dal poco che conosco, lo devono essere anche tutte le "dir" che stanno sopra alla "log"
ovvero, per cominciare, la "dir" che contiene gli script da eseguire
perchè é li che é allocata la "log"

tutto ciò non è proprio in favore della sicurezza del server, tutte le "dir" del sito web sono alla mercè dei "web server's user"

meglio creare una "dir" a se stante, che non interagisca con le "dir" del sito web

(730 precompilato non fa testo, php non gestiva un sito web, ma di fatto era un ftp per trasferire un file
per questa ragione il log era posizionato nella stessa "dir" degli script)

If the special value syslog is used, the errors are sent to the system logger instead.
On Unix, this means syslog(3) and on Windows NT it means the event log.
The system logger is not supported on Windows 95.
See also: syslog(). If this directive is not set, errors are sent to the SAPI error logger.
For example, it is an error log in Apache or stderr in CLI. See also error_log().

-----
ini_set("log_errors_max_len", 0);
Set the maximum length of log_errors in bytes. In error_log information about the source is added.
The default is 1024 and 0 allows to not apply any maximum length at all.
This length is applied to logged errors, displayed errors and also to $php_errormsg, but not to explicitly called functions such as error_log()().

non l'ho mai utilizzato per evitare di perdere dei messaggi, se non ho la possibilità di leggere con frequenza i log

-----
ritorno alla soluzione per me migliore,
PHP:
ini_set('error_reporting', E_ALL | E_STRICT);
ini_set('display_errors', FALSE);
ini_set('log_errors', TRUE);
ini_set('error_log', 'C:/Temp/_mySiteErrors.log');

-----
perchè non funziona, quanto hai proposto ?
1 - vedi i permessi "writable"
2 - assicurati che venga incluso il file che contiene i tuoi ini_set, metti un "echo" come prima linea
3 - non ho in mente altro (poche idee ....)
ciao
Marino
 

perseoclub

Utente Attivo
28 Nov 2015
91
0
6
:)

Tirata di orecchie.. Hai ragione, avrei dovuto leggere meglio.. Ma mentre cambiavo la configurazione degli ini_set(), la questione della scrittura del file di Log proprio non riesco ancora a capirla.

Intanto, fra i tanti, mi hai dato un grosso consiglio.. usare una cartella fuori della ROOT..

Io ho questa situazione:

ROOT
|
+---CONFIG---myconfig.php
|
+---LOG---mylog.php
|
+---index.php

1) se il codice con gli ini_set() lo inserisco direttamente all'inizio di index.php.. in file mylog.log viene scritto. Quindi i permessi ci sono..

2) se il codice con gli ini_set() lo inserisco in un file myconfig.php che poi richiamo in index.php con un include_once (ho usato "if file_exists().. con l'echo.. viene incluso, ma il file mylog.log NON viene scritto

Non capisco perché? Mi viene da pensare che le funzioni ini_set() non possano essere importati da un file esterno.. mah!

PS. alché, visto che a me servono dei msg promemoria tipo:
- "L'utente 1 si è loggato alle ore X"
- "L'utente 2 ha lanciato la query Q alle ore Y"
- "L'utente 3 ha modificato la tabella Z"
ecc..

..mi sto creando direttamente un file .txt (o meglio ancora .csv).
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
Tirata di orecchie
no,no, solo che leggendo quanto scrivono le persone, mi vengono dei dubbi, quindi meglio rivedere/approfondire l'argomento

Non capisco perché? Mi viene da pensare che le funzioni ini_set() non possano essere importati da un file esterno.. mah!
il problema sta nel "__DIR__" che hai aggiunto, perché la costante, rispecchia la posizione dello script, ovvero cambia ad ogni esecuzione di script, dovresti sostituire con un valore fisso
il mio file "php.ini" (mio, non di php) viene incluso ed eseguito correttamente (vedi anche 730 è posto all'inizio di "credenziali" e funziona)
PS. alché, visto che a me servono dei msg promemoria tipo:
- "L'utente 1 si è loggato alle ore X"
- "L'utente 2 ha lanciato la query Q alle ore Y"
- "L'utente 3 ha modificato la tabella Z"
un log operativo che deve essere gestito nell'applicazione, puoi creare una funzione che assolve il compito ed ogni volta che serve la chiami passando gli adeguati parametri
la funzione (assieme ad altre di carattere generale) può essere collocata in uno script che viene incluso
io ho inserito le seguenti nell'estensione della classe PDO che mi sono creato (anche se potevo collocarle altrove)
PHP:
public function MyLog($par1='',$par2='',$par3='') // può contenere anche il log operativo
public function MyErr($par1='',$par2='',$par3='') // termina l'applicazione in modo appropriato in caso di errore irreversibile
la funzione di errore viene chiamata in particolare quando riscontro delle anomalie relative alla sicurezza, richiamando lo script che invia la mail a chi deve riceverla e termina
PHP:
$swN = $this->SWN; require_once NS('Imailsoliderr'); logoff();
print "ERRORE INATTESO, contatta l'amministratore del sistema";
die;
ciao
Marino
 
Ultima modifica:

perseoclub

Utente Attivo
28 Nov 2015
91
0
6
modificato __DIR__ con:
$path_log = dirname(__FILE__) . '/../log/my_log.log';
ini_set('error_log',$path_log);
..e funziona tutto alla perfezione!

Ero convinto che __DIR__ fosse una costante della radice della ROOT del progetto (ma pensandoci meglio php che ne potrebbe sapere dove comincia la radice del mio progetto, se nessuno glielo dice). Mi ero ricavato anche il "suo" echo.. ma evidentemente l'avevo testato solo da index.php. Ora capisco perché con i collegamenti faccio sempre casini!

Grazie Marino, notevole :)

Lascio aperto il post per aggiornare la funzione di log.. Interessante l'invio del Log critico, tramite mail! ;)
 
Discussioni simili
Autore Titolo Forum Risposte Data
Monital Creazione file log personalizzato PHP 14
felino [WordPress] File di log degli errori WordPress 6
H Interpretare e leggere il file log di sfc/scannow. Windows e Software 0
localhost.nicola File log erroe con phpmailer PHP 3
L LOG4J in a tomcat webapplication on a server doesn't create log file Web Server 0
C php: al download di un file scrivere il log su file esterno. PHP 1
I Analizzare file log. ASP.NET 1
E fpdf salvare e aprire il file PHP 4
I asp | includere un file, indirizzo depositato in un db Classic ASP 0
felino [Windows 10] Scompare icone, file e collegamenti sul desktop Windows e Software 0
S passare un valore da un form a un file .php con metodo post PHP 4
D Miglior modo per estrarre le occorrenze di un elemento in un set di più file xml e quindi scrivere il risultato in una tabella Excel o magari in JSON XML 0
G file CSS contenente variabili HTML e CSS 1
M Creare traccia di download file sul server HTML e CSS 2
I elimina file PHP 1
I cerca file sottocartella unlink file PHP 0
I sessione username scarica file PHP 1
S Aggiornare percorso file collegati MS Access 0
I lista file sottocartella elimina file PHP 3
F comando di inclusione file audio in I-Pad non funziona HTML e CSS 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
I visualizza file sottocartella elimina singolo file PHP 1
I caricamento file in sottocartella nome utente PHP 3
I cartella sottocartella apri o scarica file pdf PHP 1
K Sfondo nuovo file Photoshop 0
C Wp-admin a file php WordPress 5
G Importazione file .sql Web Server 0
csi Inviare file jpg in locale alla stampante con php PHP 0
otto9due Proteggere una cartella e file con password tramite .htaccess e .htpasswd Web Server 0
MarcoGrazia HTML5 <picture> e i file source HTML e CSS 2
MarcoGrazia criptare un file PHP 2
U Link a doppio file PHP PHP 0
U Link a pagina ed esecuzione file PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
I Documento file word Java 0
FDF182 file .bin nell' email PHP 0
E Sito violato, file modificati, cartelle create WordPress 1
F LETTURA FILE SU DIRECTORY IN RETE Javascript 0
Y Percorso assoluto file immagine HTML e CSS 9
M Durata di un file MP4 Classic ASP 1
L problema collegamento file css con html HTML e CSS 1
otto9due Proteggere file caricati dall'esterno ma renderli accessibili per gli utenti loggati. PHP 4
Y Problema percorso file in rete PHP 1
otto9due Impedire esecuzione diretta dei file PHP 7
E Problema accesso a file con app sviluppata con MIT APP INVENTOR 2 Sviluppo app per Android 0
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
keyascii File temporanei Sessioni PHP 6
T Come esportare Thunderbird MBOX in file PST di Outlook? Windows e Software 2
K File audio in html, chi mi può aiutare? HTML e CSS 0
K Aiuto con file audio in html HTML e CSS 1

Discussioni simili