Skip to content

quakelee/logrusviper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

logrusviper

A Module to help load Logrus configurations from spf13/Viper. Supply a simple way to set logrus by viper. Logrus configurations can set with other config entries, no need to have a standalone configuration for it

Why?

Logrus is great, but can't parse configuration from file or other sources, have to code it. Nowaday tons of apps are coded with spf13/Viper, get configurations from file or other sources, but there is no helper can parse out Logrus from source and set up it.

Howto use it

Configuration file example: TOML format

othersetting1 = "abc"
othersetting2 = "def"

[logger]
level = "debug"
[logger.out]
name = "file"
[logger.out.options]
filename = "/tmp/test.log"
[logger.formatter]
name = "text"

[[logger.hooks]]
    name = "slackrus"
    [logger.hooks.options]
        HookURL = "https://hooks.slack.com/services/XXXXXXXXX/YYYYYYYYYY/ZZZZZZZZZZZZZZZZZZZZZZZZZ"
        AcceptedLevels = "debug"
        Channel = "#logrus-viper"
        IconEmoji = ":rotating_light:"
        Username = "logrusviper"
[[logger.hooks]]
    name = "syslog"
    [logger.hooks.options]
        protocol = "udp"
        target = "127.0.0.1:514"
	level = "debug"
	tag = "logrusviper"

YAML format

---
othersetting1: "abc"
othersetting2: "def"

logger:
  level: debug
  out:
    name: file
    options:
      filename: '/tmp/test.log'
  formatter:
    name: text
  hooks:
  - name: slackrus
    options:
      HookURL: 'https://hooks.slack.com/services/XXXXXXXXX/YYYYYYYYYY/ZZZZZZZZZZZZZZZZZZZZZZZZZ'
      AcceptedLevels: debug
      Channel: '#logrus-viper'
      IconEmoji: ':rotating_light:'
      Username: logrusviper
  - name: syslog
    options:
      protocol: udp
      target: '127.0.0.1:514'
      level: debug
      tag: logrusviper

JSON format

{
    "othersetting1": "abc",
    "othersetting2": "def",
    "logger": {
        "level": "debug",
        "formatter": {
            "name": "text"
        },
        "out": {
            "name": "file",
            "options": {
                "filename": "/tmp/test.log"
            }
        },
        "hooks": [
        {
            "name": "slackrus",
            "options": {
                "HookURL":        "https://hooks.slack.com/services/XXXXXXXXX/YYYYYYYYYY/ZZZZZZZZZZZZZZZZZZZZZZZZZ",
                "AcceptedLevels": "debug",
                "Channel":        "#logrus-viper",
                "IconEmoji":      ":rotating_light:",
                "Username":       "logrusviper"
            }
        },
        {
            "name": "syslog",
            "options": {
                "protocol": "udp",
                "target":   "127.0.0.1:514",
                "level":    "debug",
                "tag":      "logrusviper"
            }
        }
        ]
    }
}

Code example:

import (
	"github.com/quakelee/logrusviper"
	log "github.com/sirupsen/logrus"
	"github.com/spf13/viper"
	)

// initConfig reads in config file and ENV variables if set.
func initConfig() {
	if cfgFile != "" {
		// Use config file from the flag.
		viper.SetConfigFile(cfgFile)
	} else {
		// Find home directory.
		home, err := homedir.Dir()
		if err != nil {
			fmt.Println(err)
			os.Exit(1)
		}

		// Search config in home directory with name ".dbutil" (without extension).
		viper.AddConfigPath(home)
		viper.SetConfigName(".dbutil")
	}

	viper.AutomaticEnv() // read in environment variables that match

	// If a config file is found, read it in.
	if err := viper.ReadInConfig(); err == nil {
		log.Println("Using config file:", viper.ConfigFileUsed())
		logrusviper.SetLogrusConfig(log.StandardLogger(), viper.GetViper())
	} else {
		fmt.Println(err.Error())
	}
}

func main() {
	initConfig()
	logrus.WithFields(logrus.Fields{
		"animal": "walrus",
	}).Error("A walrus appears")
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages