We're planting a tree for every job application! Click here to learn more

How to save logs in a custom log file in Golang?

Mohammad Gholami

20 Jan 2021

2 min read

How to save logs in a custom log file in Golang?
  • Go

Loggin in Unix log server in Golang

The log package in Golang, allows you to send log messages to log files. This log file can be syslog, mail.log, or your custom log file. In this article, you'll learn how to do this. We are going to use log/syslog package to set the log file.

Logging to syslog

The example below shows you the way of sending log messages to /var/log/syslog file in Unix os.

package main

import (
	"log"
	"log/syslog"
	"os"
)


func main() {
	// Log to syslog
	logWriter, err := syslog.New(syslog.LOG_SYSLOG, "My Awesome App")
	if err != nil {
		log.Fatalln("Unable to set logfile:", err.Error())
		return
    }
    // set the log output
    log.SetOutput(logWriter)
    
	log.Println("This is a log from GOLANG")
}

Now, if you run the application, This is a log from GOLANG will be logged in the syslog file. You can check it using this command:

$ tail -f /var/log/syslog

The output would be something like this:

...
Dec 23 01:12:21 sam My Awesome App[102379]: 2020/12/23 01:12:21 This is a log from GOLANG

Sometimes you need to log the line number logged message. To do that, you have to set the Lshortfile flag to the log package.

package main

import (
	"log"
	"log/syslog"
	"os"
)


func main() {
	// Log to syslog
	logWriter, err := syslog.New(syslog.LOG_SYSLOG, "My Awesome App")
	if err != nil {
		log.Fatalln("Unable to set logfile:", err.Error())
		return
    }
    
    // + set log flag
    log.SetFlags(log.Lshortfile)

    // set the log output
    log.SetOutput(logWriter)
    
	log.Println("This is a log from GOLANG")
}

The logged message would be like this:

Dec 23 01:17:28 sam My Awesome App[103468]: logging.go:20: This is a log from GOLANG

As you can see, logging.go:20: is added to the log message and tell you the filename and line number of the code that the log function called.

Logging to a custom log file

If you want to write your log messages to a custom log file, take a look at the example below:

package main

import (
	"log"
	"log/syslog"
	"os"
)

func main() {
	// log to custom file
    LOG_FILE := "/tmp/myapp_log"
    // open log file
	logFile, err := os.OpenFile(LOG_FILE, os.O_APPEND|os.O_RDWR|os.O_CREATE, 0644)
	if err != nil {
		log.Panic(err)
		return
    }
    defer logFile.Close()
    
    // Set log out put and enjoy :)
    log.SetOutput(logFile)

    // optional: log date-time, filename, and line number
    log.SetFlags(log.Lshortfile | log.LstdFlags)
    
	log.Println("Logging to custom file")
}

Now run the application and check the result:

$ tail -f /tmp/myapp_log
2020/12/23 01:29:25 logging.go:29: Logging to custom file

These were 2 simple ways to save log messages to log files. I hope you find it helpful.

Did you like this article?

Mohammad Gholami

Golang and Laravel developer.

See other articles by Mohammad

Related jobs

See all

Title

The company

  • Remote

Title

The company

  • Remote

Title

The company

  • Remote

Title

The company

  • Remote

Related articles

JavaScript Functional Style Made Simple

JavaScript Functional Style Made Simple

Daniel Boros

12 Sep 2021

JavaScript Functional Style Made Simple

JavaScript Functional Style Made Simple

Daniel Boros

12 Sep 2021

WorksHub

CareersCompaniesSitemapFunctional WorksBlockchain WorksJavaScript WorksAI WorksGolang WorksJava WorksPython WorksRemote Works
hello@works-hub.com

Ground Floor, Verse Building, 18 Brunswick Place, London, N1 6DZ

108 E 16th Street, New York, NY 10003

Subscribe to our newsletter

Join over 111,000 others and get access to exclusive content, job opportunities and more!

© 2023 WorksHub

Privacy PolicyDeveloped by WorksHub