Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

where does go log the errors?

Tags:

logging

go

I'm using the log packages and I'm wondering what's the default destination of the log data. I can't find it anywhere. Do I need a io writer and specifically call it after each log or how is it supposed to work ?

like image 608
The user with no hat Avatar asked May 09 '14 00:05

The user with no hat


People also ask

How do you log errors in go?

The three most popular ways to log errors in Golang are: Output the errors to the console. Log the errors to a file. Use a logging framework.

Where are go logs stored?

By default, the goanywhere. log file is stored in the [install dir]/userdata/logs directory.

How should you log an error err Golang?

The most common way to handle errors is to return the error type as the last return value of a function call and check for the nil condition using an if statement.

What is an error log?

An error log is a file that contains detailed records of error conditions a computer software encounters when it's running. The name is generic: sometimes, an application can log non-error type messages in its error log.


1 Answers

It should be stdErr, as in line 58 of log.go:

var std = New(os.Stderr, "", LstdFlags)

So package methods like Fatal() uses std by default:

// Fatal is equivalent to Print() followed by a call to os.Exit(1).
func Fatal(v ...interface{}) {
    std.Output(2, fmt.Sprint(v...))
    os.Exit(1)
}

The blog post "How to write Go packages coders will love " (by Baron Schwartz) references that technique:

One of the patterns I've found in the standard Go library is what I call package-and-object. (That's my own name; maybe I'm reinventing or naming something already known by another name.) You can see this idiom in several packages. It makes these packages a delight to use.

The essence of the idiom is that you design a type with methods as usual, and then you also place matching functions at the package level itself. These functions simply delegate to a default instance of the type that's a private package-level variable, created in an init() function.

To take a look at the default logging functionality, for example, you can just import the log package and then write things like log.Print(). It's super-concise and handy, and it does the right thing.
Want to customize it? Make your own log.Logger variable, and set its properties.


Note that, with Go 1.13 (Q3 2019), the new Writer() function returns the output destination for the standard logger.

like image 88
VonC Avatar answered Nov 09 '22 19:11

VonC