• Publicidad

Guardar un log en un archivo txt si hay error en un script

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Guardar un log en un archivo txt si hay error en un script

Notapor mariomb19 » 2012-05-16 08:24 @391

Buenas tardes. Quisiera guardar un log. Vi por el foro el Log::Log4Perl pero no lo entiendo bien, lo que quiero hacer algo como esto.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $dbt= DBI->connect('DBI:Pg:dbname=xxx;host=xxx.xxx.xxx.xxx','xxxx','xxxxxx')|| die "ERROR CONEXION : $DBI::errstr";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Pero además, ese error, aparte de aparecer en pantalla en caso de no conectarse, se guarde en un archivo txt, ¿me podrían decir qué función uso? Gracias.
mariomb19
Perlero nuevo
Perlero nuevo
 
Mensajes: 30
Registrado: 2012-04-30 09:39 @444

Publicidad

Re: Guardar un log en un archivo txt si hay error en un scri

Notapor explorer » 2012-05-16 09:02 @418

Sí, de forma profesional se usa Log::Log4perl, pero requiere algo de aprendizaje.

Una forma de resolverlo podría ser así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $dbt = DBI->connect('DBI:Pg:dbname=xxx;host=xxx.xxx.xxx.xxx','xxxx','xxxxxx');

if (not defined $dbt) {
    my $msg = "ERROR CONEXION : $DBI::errstr\n";
    escribe_en_log($msg);
    die $msg;
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Al principio del programa abres el log en forma de añadir ('>>') y luego defines la subrutina escribe_en_log(), donde lo único que tiene que hacer es mandar el mensaje al log (con un print), y regresar. En caso de ser un fallo grave, el programa morirá con un die(), pero eso ya no es responsabilidad de esta subrutina.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Guardar un log en un archivo txt si hay error en un scri

Notapor mariomb19 » 2012-05-16 09:31 @438

Amigo, disculpa las molestias, pero no te entendí bien, sobre abrir al principio del programa el log '>>' y definir la subrutina.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3. use DBI;
  4. use DBD::Pg;
  5.  
  6.                          
  7.                    
  8. my $dbh= DBI->connect('DBI:Pg:dbname=hcm;host=xxx.xxx.xxx.xxx','xxx','xxxxxxx');
  9.            if (not defined $dbh) {
  10.            my $msg = "ERROR CONEXION : $DBI::errstr\n";
  11.            escribe_en_log($msg);
  12.            die $msg;
  13.            }
  14.                              
  15. $dbh->disconnect();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Si tengo este programa ¿cómo guardo el error en un archivo txt independiente?
Última edición por mariomb19 el 2012-05-16 10:06 @462, editado 1 vez en total
mariomb19
Perlero nuevo
Perlero nuevo
 
Mensajes: 30
Registrado: 2012-04-30 09:39 @444

Re: Guardar un log en un archivo txt si hay error en un scri

Notapor explorer » 2012-05-16 10:02 @459

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use warnings;
  3. use DBI;
  4.  
  5. # Abrimos el log
  6. open my $LOG, '>>log.txt' or die "ERROR: No pude escribir en el log.txt: $!\n";
  7.  
  8. # Programa
  9. registra('Inicio de ejecución');
  10.  
  11. my $dbh = DBI->connect( 'DBI:Pg:dbname=hcm;host=161.196.16.146', 'hcm', 'sirphp' );
  12. if ( not defined $dbh ) {
  13.     my $msg = "ERROR CONEXION : " . $DBI::errstr;
  14.     registra($msg);
  15.     die "$msg\n";
  16. }
  17.  
  18. # Fin
  19. $dbh->disconnect() and registra('Cierre correcto de la conexión');
  20. registra('Fin de ejecución');
  21. close $LOG;
  22. exit 0;
  23.  
  24. # Subrutinas
  25. sub registra {
  26.     my $msg = shift;
  27.     print $LOG "$msg\n";
  28. }
  29.  
  30.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 17 invitados