Tail for Win32: utilidad para seguir los logs

Hablando del post anterior sobre cómo escribir en ficheros en XUL y la posibilidad de usarlo para logs, he pensado que tampoco estaría mal hablar del comando tail, el cual muestra el final de un archivo, y si se le añade la opcion -f, dejará abierto el archivo e irá mostrando las nuevas líneas que se vayan añadiendo al archivo.
Quienes sean usuarios de Unix, Linux y creo que de Mac, conocerán el uso de este comando y la ayuda que puede prestarnos a la hora de ver logs. Para los usuarios de Windows existen programas que imitan al tail y uno de ellos es Tail for Win32, el cual a parte de leer varios ficheros simultáneamente, permite crear filtros de palabras y resaltarlas, enviar e-mails con notificaciones, añadir plugins y permitir ficheros de cualquier tamaño.
tail.png

Tail for Win32

|

Escribir en ficheros mediante XUL

Leyendo la entrada de aNieto2K sobre logs en Javascript, me he acordado de que hace tiempo que quiero comentar cómo escribir en ficheros mediante XUL en extensiones para Firefox.

Aunque la principal función puede ser la escritura de opciones o ficheros de configuración o guardar datos, el motivo por el que yo lo busqué era para hacerme unos logs que me faciliten el trabajo del desarrollo de una extensión para Firefox (de aquí la asociación con el post de aNieto2K).

var savefile = "c:\\displaynotes.log.txt";
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
} catch (e) {
alert("Permission to save file was denied.");
}
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath( savefile );
if ( file.exists() == false ) {
alert( "Creating file... " );
file.create( Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 420 );
}
var outputStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
.createInstance( Components.interfaces.nsIFileOutputStream );
// Suponemos que existe una variable con el texto llamada content
outputStream.init( file, 0x04 | 0x10, 420, 0 );
var result = outputStream.write( content, content.length );
outputStream.close();

En el init del outputStream nos encontramos con una serie de flags para abrir el fichero que se usan como máscara. Estos flags tienen los siguientes posibles valores:

RDONLY         0x01
PR_WRONLY      0x02
PR_RDWR        0x04
PR_CREATE_FILE 0x08
PR_APPEND      0x10
PR_TRUNCATE    0x20
PR_SYNC        0x40
PR_EXCL        0x80

A parte, existe un parámetro para indicar el modo del fichero, válido únicamente para entornos Unix:

00400   Read by owner.
00200   Write by owner.
00100   Execute (search if a directory) by owner.
00040   Read by group.
00020   Write by group.
00010   Execute by group.
00004   Read by others.
00002   Write by others
00001   Execute by others.

No recuerdo de dónde saqué esta información, por lo que no os puedo poner la referencia.

links for 2006-11-28