🥇 Logs, Uso de archivos como logs.

Supongamos que se desea guardar la salida de los logs dentro de un archivo, para tal caso podemos utilizar el mandejador de archivos provisto por el paquete os, que escribe en un archivo utilizando las capacidades del sistema.

package main

import (
    "log"
    "os"
)

func main() {
    // abrir el archivo webserver.log para escritura
    f, err := os.OpenFile("webserver.log", os.O_APPEND|os.O_CREATE|os.O_RDWR, 0666)
    if err != nil {
        log.Fatal(err)
    }
    // y cerrar cuando termine la funcion main
    defer f.Close()
    // asociar el manejador del archivo al log
    log.SetOutput(f)
    // agregan 10 lineas al archivo log
    for i := 0; i <= 10; i++ {
        log.Printf("Error línea %v", i)
    }
}

Primero abrimos/creamos un archivo para escritura o terminamos el programa si no es posible escribir el archivo en el sistema. Al finalizar la funcion main el archivo se cierra.

f, err := os.OpenFile("webserver.log", os.O_APPEND|os.O_CREATE|os.O_RDWR, 0666)
if err != nil {
    log.Fatal(err)
}
defer f.Close()

Asociamos el logger al manejador del archivo que acabamos de abrir.

log.SetOutput(f)

Ahora podemos agregar líneas al archivo mediante log.

for i := 0; i <= 10; i++ {
    log.Printf("Error línea %v", i)
}

Ejecutamos el programa y revisamos el archivo webserver.log que se ha creado.

YYYY/MM/DD hh:ii:ss Error línea 0
YYYY/MM/DD hh:ii:ss Error línea 1
YYYY/MM/DD hh:ii:ss Error línea 2
YYYY/MM/DD hh:ii:ss Error línea 3
YYYY/MM/DD hh:ii:ss Error línea 4
YYYY/MM/DD hh:ii:ss Error línea 5
YYYY/MM/DD hh:ii:ss Error línea 6
YYYY/MM/DD hh:ii:ss Error línea 7
YYYY/MM/DD hh:ii:ss Error línea 8
YYYY/MM/DD hh:ii:ss Error línea 9
YYYY/MM/DD hh:ii:ss Error línea 10

Si bien el uso de archivos puede ser utilizado en Golang para el proposito de manejo de los logs. Es recomendable utiliar el sistema operativo y dirigir los logs mediante este. Esto se puede hacer solo imprimiendo la salida de los logs.

package main

import (
    "log"
    "os"
)

func main() {
    for i := 0; i <= 10; i++ {
        log.Printf("Error línea %v", i)
    }
}

Y dirigimos la salida utilizando el sistema operativo.

go run main.go > webserver.log 2>&1
Logs, Introducción. Programas de la línea de comandos, Captura de datos.
comments powered by Disqus