Foros del Web » Programando para Internet » PHP »

Como crear logs

Estas en el tema de Como crear logs en el foro de PHP en Foros del Web. Quiero crear un logs de errores a la hora de insertar o actualizar o eliminar noticias de mi BD. Es decir si mi consulta me ...
  #1 (permalink)  
Antiguo 02/03/2004, 22:56
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Como crear logs

Quiero crear un logs de errores a la hora de insertar o actualizar o eliminar noticias de mi BD. Es decir si mi consulta me dio error por x o por y guardar los resultados de esa consulta en un txt a algo por el estilo.

Salu2
__________________
Ing. Reynier Pérez Mira
  #2 (permalink)  
Antiguo 03/03/2004, 07:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues ..

No sé si usarás ya estructuras tipo:

$result=mysql_query($sql) or die(mysql_error());

Pero, .. puedes usar la misma estructura condicional (una ejecución fallida de mysql_query() por ejemplo arroja un "false") para llamar a tu función que haga el log adecuado y sin el "die()" por si quieres continuar la ejecución de la aplicación y dar algún mensaje de error personalizado.)

Pero, llegado a este punto tal vez te combien ir viendo ya alguna capa de abstracción de Base de datos. Estas "capas" suelen ser objetos (classes OOP) y principalmente lo que hacen es "pasar" todas tus llamadas a tus funciones "nativas" de tu BD (en tu caso a las mysql_xxx()) por unos métodos ("funciones") así todo acceso a tu BD (por las funciones de PHP para tu BD en concreto) las "centraliza" .. con eso es más cómodo por ejemplo gestionar los errores dandoles un formato único e incluso hacer tu log de errores o lo que requieras.

Se usan tipo:

$db->conectaBD(datos conexión);
$db->consulta($sql);
$db->otrosmetosos ....

En ese ejemplo (hipotetico) .. lo que harías directamente por mysql_query($sql) .. ahora lo harías por $db->consulta($sql) así que ahí en ese método (función) puedes implementar la lógica de creación de tu log si hay un error (previa detección).

Classes (capas de abstracción de BD) tienes muchas ya implementadas. La mayoría (que se precie) ya gestiona los errores y tal vez hasta hagan "log" (y si no los hace no sería dificil implementar un nuevo método para tal fin). Ademas de esto, no sólo se usan para "sustituir" funciones o "centarlizar" sino que te permiten usar indistintamente o Mysql como BD u otras Base de datos (PostgreSQL, MS SQL server ..etc) siempre y cuando tu SQL empleado sea compatible con estas podrás hacer funciona tu aplicación en tantas BD como soporte tu capa de abstracción de BD o como mucho tendras que cambiar ligeramente alguna sentencia SQL .. pero poco o nada de código PHP si migras tu aplicación hacia otro Motor de BD o bien quieres que tu aplicación funcione con varios motores de BD.

En sitios como www.phpclasses.org puedes encontrar estas capas de abstracción de BD ...

Una de las más famosas y completa es: ADOdb , pero hay muchas más simples que .. para ir tomando contacto con el tema te servirán.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 03/03/2004, 08:11
 
Fecha de Ingreso: diciembre-2003
Mensajes: 54
Antigüedad: 14 años
Puntos: 0
Hola, como dice Cluster, utilizar classes es un buena idea, simplifica mucho el trabajo a mediano y largo plazo, y mejora el codigo. Pero para el manejo de errores utilize o no classes, podes usar set_error_handler junto con trigger_error. Con el primero defines la función que se va a encargar de procesar los mensajes de error (sean propios del script o intencionalmente llamados por vos), con el segundo llamas a esa funcion pasandole automaticamente las variables de contexto (archivo, numero de linea,etc). Para una consulta de mysql quedaria
:
Código PHP:
function error_handler(...) {...}
set_error_handler("error_handler");
...
$r_query=mysql_query($query) or die(trigger_error());
... 
En la función que se encarga de procesar los errores, el error lo podes guardar en un log, mandarlo por mail, imprimirlo en pantalla, etc.

Para más información
http://ar.php.net/manual/en/function...or-handler.php
http://ar.php.net/manual/en/function.trigger-error.php

Última edición por Ktion; 03/03/2004 a las 08:14
  #4 (permalink)  
Antiguo 03/03/2004, 08:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Estarìa bueno capturar el error de PHP con el control del handler que proponer Ktion .. pero te faltaría también añadir a esa función el control de errores de SQL/conexión que arroje Msyql en este caso usando la función mysql_error() a la hora de generar tu reporte de errores .. así veras más claro el error concreto. También puedes usar las constantes __FILE__ y ___LINE___ para determinar en que script se produjo el error y en que línea concreta del mismo.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 03/03/2004, 08:48
 
Fecha de Ingreso: diciembre-2003
Mensajes: 54
Antigüedad: 14 años
Puntos: 0
Si, el script anterior no es funcional, es solo de ejemplo, en realidad trigger_error necesita un parametro obligatorio (sino genera error ) , y otro opcional que es el tipo de error.
El parametro obligatorio seria el texto del error o sea:
mysql_query(...) or trigger_error(mysql_error())
El archivo y la linea, constantes __FILE__ y __LINE__, las pasa automaticamente el trigger_error al error_handler, por eso es que esta última función tiene que definirse con varios parametros.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 07:22.