Estoy intentando realizar un script que me historifique los ficheros de registro que mi proceso va creando.
Resulta que tengo un productor y un consumidor, y los dos van escribiendo en el fichero que se crea por día, con el siguiente formato: aaaa_mm_dd_Log.txt.
El problema me surge a la hora de cambiar de día. El productor cambia la escritura al fichero correspondiente, pero el consumidor sigue escribiendo en el fichero del día anterior.
La forma en la que lo estoy haciendo es la siguiente:
1- Una función de escritura en log:
Using perl Syntax Highlighting
- sub Escribir_Log()
- {
- # Recogida de la ristra
- my ($ristraLog) = @_;
- my ($fechaHora, $fecha, $hora) = &fechaHora();
- my $aux_nombre_fichero_Log = $fecha.$nombre_fichero_Log;
- printf $fichLog $aux_nombre_fichero_Log;
- if( ! (-e ($path.$aux_nombre_fichero_Log)) )
- {
- &Abrir_Fichero_Log();
- }
- if( ($fichLog != undef) && ((length $ristraLog) > 0) )
- {
- #flock(\*$fichLog, LOCK_EX); # solicitamos el bloqueo, y de forma esclusiva
- #seek(\*$fichLog, 0, SEEK_END); # nos colocamos al final del archivo
- #my ($fechaHora,$fecha,$hora) = &fechaHora();
- #$ristraLog = $hora.$ristraLog;
- #print $fichLog $ristraLog; # se escribe en el fichero.
- #flock(\*$fichLog, LOCK_UN); # desbloqueamos el acceso
- flock(\*$fichLog, LOCK_EX) or die $!; # solicitamos el bloqueo, y de forma esclusiva
- # flock(\*$fichLog, LOCK_EX); # solicitamos el bloqueo, y de forma esclusiva
- seek(\*$fichLog, 0, SEEK_END) or die $!; # nos colocamos al final del archivo
- # seek(\*$fichLog, 0, SEEK_END); # nos colocamos al final del archivo
- my ($fechaHora,$fecha,$hora) = &fechaHora();
- $ristraLog = $hora.$ristraLog;
- print $fichLog $ristraLog; # se escribe en el fichero.
- flock(\*$fichLog, LOCK_UN) or die $!; # desbloqueamos el acceso
- #flock(\*$fichLog, LOCK_UN); # desbloqueamos el acceso
- }
- } # Fin Escribir_Log
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Y 2- la función de apertura del fichero:
Using perl Syntax Highlighting
- sub Abrir_Fichero_Log()
- {
- my ($fechaHora, $fecha, $hora) = &fechaHora();
- my $aux_nombre_fichero_Log = $fecha.$nombre_fichero_Log;
- #if( ! (-e ($path.$aux_nombre_fichero_Log)) )
- #{
- # Si existía alguno abierto, se cierra y se abre otro
- # if($fichLog != undef)
- # {
- # NOTA: No se utiliza el bloqueo porque al intentar desbloquear, después de cerrar, da error porque
- # pone la variable "fichLog" como undef, incluso antes de llegar a la asignación a pelo.
- # flock(\*$fichLog, LOCK_EX);
- # close($fichLog);
- # $fichLog = undef;
- # }
- #}
- # Se abre el nuevo
- #if($fichLog != undef)
- #{
- # flock(\*$fichLog, LOCK_EX);
- #}
- #open($fichLog, ">>$aux_nombre_fichero_Log");
- #seek(\*$fichLog, 0, SEEK_END);
- #if($fichLog != undef)
- #{
- # flock(\*$fichLog, LOCK_UN);
- #}
- #printf $fichLog $fechaHora."Inicio Log::v1\n";
- #printf $fichLog $aux_nombre_fichero_Log;
- # 2016-08-31
- #flock(\*$fichLog, LOCK_EX);
- open($fichLog, ">>$aux_nombre_fichero_Log");
- #flock(\*$fichLog, LOCK_UN);
- printf $fichLog $fechaHora."Inicio Log::v1\n";
- printf $fichLog $aux_nombre_fichero_Log;
- }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Les estaría agradecido si me ayudaran a ver dónde está el error.
Gracias.