¿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