2021-06-16 20:19:45 +00:00
|
|
|
# go-log
|
|
|
|
|
2022-04-01 16:16:46 +00:00
|
|
|
[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai)
|
|
|
|
[![](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](https://ipfs.io/)
|
|
|
|
[![GoDoc](https://pkg.go.dev/badge/github.com/ipfs/go-log/v2.svg)](https://pkg.go.dev/github.com/ipfs/go-log/v2)
|
2021-06-16 20:19:45 +00:00
|
|
|
|
|
|
|
> The logging library used by go-ipfs
|
|
|
|
|
|
|
|
go-log wraps [zap](https://github.com/uber-go/zap) to provide a logging facade. go-log manages logging
|
|
|
|
instances and allows for their levels to be controlled individually.
|
|
|
|
|
|
|
|
## Install
|
|
|
|
|
|
|
|
```sh
|
|
|
|
go get github.com/ipfs/go-log
|
|
|
|
```
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
Once the package is imported under the name `logging`, an instance of `EventLogger` can be created like so:
|
|
|
|
|
|
|
|
```go
|
|
|
|
var log = logging.Logger("subsystem name")
|
|
|
|
```
|
|
|
|
|
|
|
|
It can then be used to emit log messages in plain printf-style messages at seven standard levels:
|
|
|
|
|
|
|
|
Levels may be set for all loggers:
|
|
|
|
|
|
|
|
```go
|
|
|
|
lvl, err := logging.LevelFromString("error")
|
2022-04-01 16:16:46 +00:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
2021-06-16 20:19:45 +00:00
|
|
|
logging.SetAllLoggers(lvl)
|
|
|
|
```
|
|
|
|
|
|
|
|
or individually:
|
|
|
|
|
|
|
|
```go
|
2022-04-01 16:16:46 +00:00
|
|
|
err := logging.SetLogLevel("net:pubsub", "info")
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
or by regular expression:
|
|
|
|
|
|
|
|
```go
|
|
|
|
err := logging.SetLogLevelRegex("net:.*", "info")
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
### Environment Variables
|
|
|
|
|
|
|
|
This package can be configured through various environment variables.
|
|
|
|
|
|
|
|
#### `GOLOG_LOG_LEVEL`
|
|
|
|
|
|
|
|
Specifies the log-level, both globally and on a per-subsystem basis.
|
|
|
|
|
|
|
|
For example, the following will set the global minimum log level to `error`, but reduce the minimum
|
|
|
|
log level for `subsystem1` to `info` and reduce the minimum log level for `subsystem2` to debug.
|
|
|
|
|
|
|
|
```bash
|
|
|
|
export GOLOG_LOG_LEVEL="error,subsystem1=info,subsystem2=debug"
|
|
|
|
```
|
|
|
|
|
|
|
|
`IPFS_LOGGING` is a deprecated alias for this environment variable.
|
|
|
|
|
|
|
|
#### `GOLOG_FILE`
|
|
|
|
|
|
|
|
Specifies that logs should be written to the specified file. If this option is _not_ specified, logs are written to standard error.
|
|
|
|
|
|
|
|
```bash
|
|
|
|
export GOLOG_FILE="/path/to/my/file.log"
|
|
|
|
```
|
|
|
|
|
|
|
|
#### `GOLOG_OUTPUT`
|
|
|
|
|
|
|
|
Specifies where logging output should be written. Can take one or more of the following values, combined with `+`:
|
|
|
|
|
|
|
|
- `stdout` -- write logs to standard out.
|
|
|
|
- `stderr` -- write logs to standard error.
|
|
|
|
- `file` -- write logs to the file specified by `GOLOG_FILE`
|
|
|
|
|
|
|
|
For example, if you want to log to both a file and standard error:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
export GOLOG_FILE="/path/to/my/file.log"
|
|
|
|
export GOLOG_OUTPUT="stderr+file"
|
|
|
|
```
|
|
|
|
|
|
|
|
Setting _only_ `GOLOG_FILE` will prevent logs from being written to standard error.
|
|
|
|
|
|
|
|
#### `GOLOG_LOG_FMT`
|
|
|
|
|
|
|
|
Specifies the log message format. It supports the following values:
|
|
|
|
|
|
|
|
- `color` -- human readable, colorized (ANSI) output
|
|
|
|
- `nocolor` -- human readable, plain-text output.
|
|
|
|
- `json` -- structured JSON.
|
|
|
|
|
|
|
|
For example, to log structured JSON (for easier parsing):
|
|
|
|
|
|
|
|
```bash
|
|
|
|
export GOLOG_LOG_FMT="json"
|
|
|
|
```
|
|
|
|
|
|
|
|
The logging format defaults to `color` when the output is a terminal, and `nocolor` otherwise.
|
|
|
|
|
|
|
|
`IPFS_LOGGING_FMT` is a deprecated alias for this environment variable.
|
|
|
|
|
|
|
|
#### `GOLOG_LOG_LABELS`
|
|
|
|
|
|
|
|
Specifies a set of labels that should be added to all log messages as comma-separated key-value
|
|
|
|
pairs. For example, the following add `{"app": "example_app", "dc": "sjc-1"}` to every log entry.
|
|
|
|
|
|
|
|
```bash
|
|
|
|
export GOLOG_LOG_LABELS="app=example_app,dc=sjc-1"
|
2021-06-16 20:19:45 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
## Contribute
|
|
|
|
|
|
|
|
Feel free to join in. All welcome. Open an [issue](https://github.com/ipfs/go-log/issues)!
|
|
|
|
|
|
|
|
This repository falls under the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).
|
|
|
|
|
|
|
|
### Want to hack on IPFS?
|
|
|
|
|
|
|
|
[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)
|
|
|
|
|
|
|
|
## License
|
|
|
|
|
|
|
|
MIT
|