This package supports multiple logger adapters across different levels of logging. It uses Go's native channel feature to provide goroutine-safe mechanism on large concurrency.
## Installation
To use a tagged revision:
go get gopkg.in/clog.v1
To use with latest changes:
go get github.com/go-clog/clog
Please apply `-u` flag to update in the future.
### Testing
If you want to test on your machine, please apply `-t` flag:
go get -t gopkg.in/clog.v1
Please apply `-u` flag to update in the future.
## Getting Started
Clog currently has two builtin logger adapters: `console`, `file` and `slack`.
It is extremely easy to create one with all default settings. Generally, you would want to create new logger inside `init` or `main` function.
```go
...
import (
"fmt"
"os"
log "gopkg.in/clog.v1"
)
func init() {
err := log.New(log.CONSOLE, log.ConsoleConfig{})
if err != nil {
fmt.Printf("Fail to create new logger: %v\n", err)
os.Exit(1)
}
log.Trace("Hello %s!", "Clog")
// Output: Hello Clog!
log.Info("Hello %s!", "Clog")
log.Warn("Hello %s!", "Clog")
...
}
...
```
The above code is equivalent to the follow settings:
```go
...
err := log.New(log.CONSOLE, log.ConsoleConfig{
Level: log.TRACE, // Record all logs
BufferSize: 0, // 0 means logging synchronously
})
...
```
In production, you may want to make log less verbose and asynchronous:
```go
...
err := log.New(log.CONSOLE, log.ConsoleConfig{
// Logs under INFO level (in this case TRACE) will be discarded
Level: log.INFO,
// Number mainly depends on how many logs will be produced by program, 100 is good enough
BufferSize: 100,
})
...
```
Console logger comes with color output, but for non-colorable destination, the color output will be disabled automatically.
### Error Location
When using `log.Error` and `log.Fatal` functions, the first argument allows you to indicate whether to print the code location or not.
```go
...
// 0 means disable printing code location
log.Error(0, "So bad... %v", err)
// To print appropriate code location mainly depends on how deep your call stack is,