web-dev-qa-db-fra.com

PHP La méthode error_log n'écrit pas les erreurs dans mon fichier journal d'erreurs

La méthode PHP error_log n'écrit pas les erreurs dans le fichier journal des erreurs personnalisé. Il n'écrira que dans /var/log/Apache2/php_error.log

Voici les paramètres de journalisation dans mon php.ini:

error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE
display_errors = Off
log_errors = On
log_errors_max_len = 0 ; also tried with 9999999
error_log = /var/log/Apache2/php_errors.log

PHP écrit ses erreurs dans le journal des erreurs Apache habituel (/var/log/Apache2/error.log) plutôt que dans celui que j'ai spécifié ci-dessus.

Choses que j'ai déjà essayées:

  1. J'ai arrêté et redémarré Apache après avoir modifié le fichier php.ini
  2. Le fichier /var/log/Apache2/php_errors.log correspond à 777 autorisations et le fichier existe.
  3. Il n'y a pas d'autres fichiers php.ini surchargés. (Il y a /etc/php5/cli/php.ini mais je n'utilise pas cli).
  4. Il n'y a pas d'autres paramètres error_log = xxx plus bas dans le fichier php.ini qui pourraient remplacer le premier.
  5. phpinfo () indique error_log = /var/log/Apache2/php_errors.log (c'est-à-dire le fichier correct), à la fois sous Valeur locale et Valeur principale
  6. Le script de test que j'utilise pour générer des erreurs ne contient aucun appel ini_set

(Pour info: j'utilise Apache/2.2.17 et PHP/5.3.5-1ubuntu7.2 sur Ubuntu 11.04)

Qu'est-ce que je fais mal?

16
William Clark

J'aimerais répondre à cette question car le résultat est élevé sur Google, même si c'est une vieille question.

J'ai résolu ce problème en ajoutant des autorisations en écriture pour tous les utilisateurs du répertoire des journaux.

Dans mon cas, l'utilisateur 'http' devait pouvoir écrire dans/var/log/httpd/donc j'ai couru

# chmod a+w /var/log/httpd

Si le fichier existe déjà, il peut être utile de le supprimer en premier et de permettre à Apache de le créer.

Mon fichier php.ini incluait aussi le chemin complet.

error_log = /var/log/httpd/php_errors.log
13
newmangt

Vous pouvez essayer de spécifier le nom du fichier comme ceci:

J'utilise Apache 2.2.22 sur Ubuntu.

Utilisez cette commande PHP:

error_log("eric", 3, "/home/el/error.log");

Le premier paramètre est le message à envoyer au journal des erreurs. Le second paramètre 3 signifie "attend une destination de nom de fichier. Le troisième paramètre est la destination.

Créez le fichier /home/el/error.log et définissez son propriétaire sur ceci:

el@apollo:~$ ll error.log
-rwxrwxr-x 1 www-data www-data 7 Dec 13 14:30 error.log

Lorsque PHP interprète la méthode error_log, il ajoute le message à votre fichier.

Source: http://www.php.net/manual/en/function.error-log.php

2
Eric Leschinski

supprimer php_errors.log et redémarrer Apache2, le serveur lui-même créera un nouveau fichier php_errors.log avec les autorisations et le propriétaire appropriés.

rm -f /var/log/Apache2/php_errors.log
service Apache2 restart

ll /var/log/Apache2/php_errors.log
1
蒋艾伦

Vous pouvez définir le fichier journal des erreurs pour un site dans le fichier de configuration du site VirtualHost, par exemple: /etc/Apache2/sites-enabled/example.com.conf:

<VirtualHost *:80>

  ....

  ErrorLog ${Apache_LOG_DIR}/www.example.com-error.log
  LogLevel warn
  CustomLog ${Apache_LOG_DIR}/www.example.com-access.log combined

</VirtualHost>

Dans le système unix, ${Apache_LOG_DIR} est généralement /var/log/Apache2 Les erreurs et les accès seront enregistrés dans ${Apache_LOG_DIR}/www.example.com-error.log et ${Apache_LOG_DIR}/www.example.com-access.log.

0
Amadu Bah