Make log_level user configurable

This commit is contained in:
Kristoffer Dalby 2021-08-05 19:19:25 +01:00
parent 0660867a16
commit cd2ca137c0
No known key found for this signature in database
GPG key ID: 09F62DC067465735
3 changed files with 39 additions and 6 deletions

View file

@ -119,6 +119,11 @@ Headscale's configuration file is named `config.json` or `config.yaml`. Headscal
`server_url` is the external URL via which Headscale is reachable. `listen_addr` is the IP address and port the Headscale program should listen on. `ip_prefix` is the IP prefix (range) in which IP addresses for nodes will be allocated (default 100.64.0.0/10, e.g., 192.168.4.0/24, 10.0.0.0/8) `server_url` is the external URL via which Headscale is reachable. `listen_addr` is the IP address and port the Headscale program should listen on. `ip_prefix` is the IP prefix (range) in which IP addresses for nodes will be allocated (default 100.64.0.0/10, e.g., 192.168.4.0/24, 10.0.0.0/8)
```
"log_level": "debug"
```
`log_level` can be used to set the Log level for Headscale, it defaults to `debug`, and the available levels are: `trace`, `debug`, `info`, `warn` and `error`.
``` ```
"private_key_path": "private.key", "private_key_path": "private.key",
``` ```

View file

@ -39,6 +39,8 @@ func LoadConfig(path string) error {
viper.SetDefault("ip_prefix", "100.64.0.0/10") viper.SetDefault("ip_prefix", "100.64.0.0/10")
viper.SetDefault("log_level", "debug")
err := viper.ReadInConfig() err := viper.ReadInConfig()
if err != nil { if err != nil {
return fmt.Errorf("Fatal error reading config file: %s \n", err) return fmt.Errorf("Fatal error reading config file: %s \n", err)
@ -170,24 +172,24 @@ func JsonOutput(result interface{}, errResult error, outputFormat string) {
if errResult != nil { if errResult != nil {
j, err = json.MarshalIndent(ErrorOutput{errResult.Error()}, "", "\t") j, err = json.MarshalIndent(ErrorOutput{errResult.Error()}, "", "\t")
if err != nil { if err != nil {
log.Fatalln(err) log.Fatal().Err(err)
} }
} else { } else {
j, err = json.MarshalIndent(result, "", "\t") j, err = json.MarshalIndent(result, "", "\t")
if err != nil { if err != nil {
log.Fatalln(err) log.Fatal().Err(err)
} }
} }
case "json-line": case "json-line":
if errResult != nil { if errResult != nil {
j, err = json.Marshal(ErrorOutput{errResult.Error()}) j, err = json.Marshal(ErrorOutput{errResult.Error()})
if err != nil { if err != nil {
log.Fatalln(err) log.Fatal().Err(err)
} }
} else { } else {
j, err = json.Marshal(result) j, err = json.Marshal(result)
if err != nil { if err != nil {
log.Fatalln(err) log.Fatal().Err(err)
} }
} }
} }

View file

@ -1,15 +1,41 @@
package main package main
import ( import (
"log" "os"
"time"
"github.com/juanfont/headscale/cmd/headscale/cli" "github.com/juanfont/headscale/cmd/headscale/cli"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"github.com/spf13/viper"
) )
func main() { func main() {
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
log.Logger = log.Output(zerolog.ConsoleWriter{
Out: os.Stdout,
TimeFormat: time.RFC3339,
})
err := cli.LoadConfig("") err := cli.LoadConfig("")
if err != nil { if err != nil {
log.Fatalf(err.Error()) log.Fatal().Err(err)
}
logLevel := viper.GetString("log_level")
switch logLevel {
case "trace":
zerolog.SetGlobalLevel(zerolog.TraceLevel)
case "debug":
zerolog.SetGlobalLevel(zerolog.DebugLevel)
case "info":
zerolog.SetGlobalLevel(zerolog.InfoLevel)
case "warn":
zerolog.SetGlobalLevel(zerolog.WarnLevel)
case "error":
zerolog.SetGlobalLevel(zerolog.ErrorLevel)
default:
zerolog.SetGlobalLevel(zerolog.DebugLevel)
} }
cli.Execute() cli.Execute()