File di log personalizzato

perseoclub

Utente Attivo
28 Nov 2015
88
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.039
192
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
88
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.039
192
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
88
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
Antonio67 Lanciare file shell bash da html HTML e CSS 2
G leggere file txt e stampare con php il contenuto a video PHP 7
L Modifica file upload in ASP Classic ASP 2
Cosina mostrare contenuto da file txt PHP 2
L PHPSpreadsheet inserire dati da file .xlsx/.xls su database PHP 2
M Inviare un file su un server remoto con JavaScript Javascript 0
L Ricezione dei dati su file php da modulo html PHP 6
X unire più file in un pdf Windows e Software 2
spider81man Creazione di un UNICA tabella da più file .CSV PHP 1
felino TV e pendrive USB: capacità massima e file system? Discussioni Varie 1
A invio massivo dati a file php Javascript 4
W visualizzare solo file html e sottocartelle di una cartella PHP 1
W Elenco dei link del file presenti in una cartella PHP 2
P Funzione jQuery Ajax invio file a php jQuery 1
S Download di un file in automatico dopo la sua creazione PHP 2
B ciclare file xml con PHP PHP 1
C copiare solo le vocali di un file in un'altro file PHP 2
F Funzione Glob - ricerca file contenente una parola PHP 1
L File CSV con app inventor da errore Sviluppo app per Android 2
zorro file PDF non visualizzo niente PHP 9
N Script elenco file HTML HTML e CSS 5
S Libreria PHP per creare file dwg o dxf PHP 0
T cercasi aiuto per file d1 (open-edge db) Database 0
I eliminazione file pdf PHP 0
Cosina Cancellare una specifica email da un elenco in un file txt PHP 3
R Download file multipli da directory php PHP 0
Cosina Invio messaggio a mailing list su file txt PHP 9
J GIT: Tracciare file nati successivamente SOLO in produzione HTML e CSS 0
M File excel e LibreOffice PHP 0
N file manager da php 5 a 7 PHP 15
rebeca Come Unire file PST in Uno? Windows e Software 0
R Cercare un file all'interno della directory virtuale IIS PHP 3
T Come aprire file .wtb Discussioni Varie 10
A nome file che contiene punto passato come parametro a query PHP 31
M Visualizzare file PDF con link preso dal DB PHP 0
A recuperare data creazione di un file PHP 6
D File pdf che non si aprono .... PHP 1
A aggiungere stringa all'inizio di ogni riga di un file txt PHP 3
Cosina Doppio file fopen PHP 2
O file esistente in directory Java 2
W creare file .jar Java 2
felino PHP e script generazione file excel PHP 2
S decode file json PHP 10

Discussioni simili