Logs, Uso de archivos como logs Logs, Uso de archivos como logs

🥇 Logs, Uso de archivos como logs

🍿 ¿Cómo guardar logs en archivos en Go?

Supongamos que se desea guardar la salida de los logs dentro de un archivo, para tal caso podemos utilizar el manejador 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 función 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 propósito de manejo de los logs. Es recomendable utilizar 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, Introducción
comments powered by Disqus