Manipulador de errores personalizado para PHP -- php campo con error-handling campo con logging camp codereview Relacionados El problema

Custom error handler for PHP


2
vote

problema

Español

He escrito un controlador de errores personalizado para usar en PHP. Lo que hace es simplemente capturar errores PHP, y los registra usando Monolog.

funciona, pero no puedo evitar que tenga demasiadas cosas dentro. Podría eliminar los niveles de error que no se manejan por set_error_handler , pero que está garantizado para llevar a un desarrollador que gasta 2 horas preguntándose "por qué E_Errors no se están registrando" ...

¿Podría esta función mejorarse de alguna manera?

  set_error_handler(function($errno ,$errstr,$errfile ,$errline, $errcontext) {     // When we use the error supressing operator (@)      // error_reporting is temporarily set to 0     // Do not log anything for that case     if(ini_get('error_reporting')==0){return;}       $halt = FALSE;     // http://php.net/manual/en/errorfunc.constants.php     switch($errno){         case E_USER_ERROR:         case E_RECOVERABLE_ERROR:             $halt = true;             $logType = 'error';             break;          case E_WARNING:         case E_USER_WARNING:         case E_STRICT:         case E_DEPRECATED:             $logType = 'warning';             break;          case E_NOTICE:         case E_USER_NOTICE:             $logType = 'notice';             break;              // The following error types cannot be caught by set_error_handler             // Adding them for reference only         case E_CORE_WARNING:         case E_COMPILE_ERROR:         case E_COMPILE_WARNING:         case E_CORE_ERROR:         case E_ERROR:         case E_PARSE:             return FALSE;          // We should never reach this case. But you never know         case E_ALL:         default:             $logType = 'warning';     }     Logger::{$logType}($errstr, $errcontext);     // Halt the execution for errors that should halt     if($halt)         exit($errno); });   
Original en ingles

I've written a custom Error handler for use in PHP. What it does is simply capture PHP errors, and logs them using Monolog.

It works, but I can't help that it has too much stuff inside. I could remove the error levels that are not handled by set_error_handler but that's guaranteed to lead to a developer that spends 2 hours wondering "why E_ERRORs are not getting logged"...

Could this function be improved somehow?

set_error_handler(function($errno ,$errstr,$errfile ,$errline, $errcontext) {     // When we use the error supressing operator (@)      // error_reporting is temporarily set to 0     // Do not log anything for that case     if(ini_get('error_reporting')==0){return;}       $halt = FALSE;     // http://php.net/manual/en/errorfunc.constants.php     switch($errno){         case E_USER_ERROR:         case E_RECOVERABLE_ERROR:             $halt = true;             $logType = 'error';             break;          case E_WARNING:         case E_USER_WARNING:         case E_STRICT:         case E_DEPRECATED:             $logType = 'warning';             break;          case E_NOTICE:         case E_USER_NOTICE:             $logType = 'notice';             break;              // The following error types cannot be caught by set_error_handler             // Adding them for reference only         case E_CORE_WARNING:         case E_COMPILE_ERROR:         case E_COMPILE_WARNING:         case E_CORE_ERROR:         case E_ERROR:         case E_PARSE:             return FALSE;          // We should never reach this case. But you never know         case E_ALL:         default:             $logType = 'warning';     }     Logger::{$logType}($errstr, $errcontext);     // Halt the execution for errors that should halt     if($halt)         exit($errno); }); 
        

Lista de respuestas

1
 
vote

¡Mira aquí eso Ya está probado en proyectos en vivo. Catcher.

Los errores fatales pueden ser atrapados solo por 'Register_shutdown_Function'

No realiza un seguimiento de excepciones sin conexión, se puede hacer por 'set_exception_handler'

SI CÓDIGO REDUCCIÓN TODA LA MEMORIA No podrá registrar el error, pero si no tiene errores fatales, por lo que no es su caso.

 

Look here it is already tested on live projects error catcher.

Fatal errors can be catch only by 'register_shutdown_function'

You do not track uncatched Exceptions, it can be done by 'set_exception_handler'

If code runout all memory it will not able to log error, but if you does not catch Fatal errors so it is not your case.

 
 

Relacionados problema

6  Autorización PBKDF2  ( Pbkdf2 authorization ) 
He descubierto que el uso de contraseñas hashed con sales es una idea mucho mejor que MD5 / SHA256, por lo que no los estoy pulsando con PBKDF2. Sin embargo, ...

4  Iniciar sesión en la base de datos con el núcleo ASP.NET  ( Logging into database with asp net core ) 
En el Container9 de mi aplicación ASP.NET Core Quiero configurar el 99887766655443330 para que inicie sesión en la base de datos. Por lo tanto, creo despu...

5  Iniciar sesión en un archivo vs udp  ( Logging to a file vs udp ) 
Estoy tratando de entender dónde mi implementación de rubíes de esto falla y con la esperanza de que un experto arroje algo de luz sobre esta situación. He in...

5  Método / Parámetro Tracer  ( Method parameter tracer ) 
Estoy escribiendo una clase que puede registrar la actividad de una solicitud durante el tiempo de ejecución. El plan es que la cadena 9988776665544330 se e...

2  Evitando la duplicación de código en múltiples, excepto bloques en la clase de registrador [cerrado]  ( Avoiding code duplication in multiple except blocks in logger class ) 
cerrado. Esta pregunta es off-topic . Actualmente no está aceptando respuestas. ¿Quieres ...

6  Uso de la excepción al registro de la pila de ejecución  ( Use of exception to log execution stack trace ) 
He estado de ida y vuelta con un colega sobre el uso de Throwable.fillInStackTrace . Este Log clase está destinado a envolver el Fachada de registro simpl...

3  Archivo de registro diferido Cerrar  ( Deferred log file close ) 
Mi código funciona en que se compila, y cuando se ejecuta, escribe un archivo de registro utilizando un escritor búfer. pero me pregunto si: Soy correcto...

4  Posibles peligros de desbordamiento de búfer en el programa de análisis de registro C  ( Possible buffer overflow dangers in c log parsing program ) 
Después de horas de trabajo, finalmente terminé mi primer programa de análisis de registro C! (Anteriormente fue un guión bash, ahora es C). ¡Aunque creo qu...

1  Encapsulando el registro y lanzamiento de excepciones a un método. ¿Mala práctica?  ( Encapsulating logging and throwing exceptions into a method bad practice ) 
Ejemplo de código original if (var1 == null) { String msg = "var 1 is null"; logger.log(msg); throw new CustomException(msg); } if (var2 == nul...

5  ¿Cómo mejoro este mecanismo de tala?  ( How do i improve this logging mechanism ) 
Hay bastantes cosas que estoy considerando: Tendré que comprobar si null valores Tendré serios problemas que lo persisten en la base de datos. ¿Cómo...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos