This file is indexed.

/usr/share/gocode/src/go.pedge.io/lion/env/env.go is in golang-go.pedge-lion-dev 0.0~git20171203.2a81062-5.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/*
Package envlion provides simple utilities to setup lion from the environment.
*/
package envlion // import "go.pedge.io/lion/env"

import (
	"log/syslog"
	"os"
	"strings"

	"go.pedge.io/env"
	"go.pedge.io/lion"
	"go.pedge.io/lion/current"
	"go.pedge.io/lion/grpc"
	"go.pedge.io/lion/syslog"
)

// Env defines a struct for environment variables that can be parsed with go.pedge.io/env.
type Env struct {
	// The log app name, will default to app if not set.
	LogAppName string `env:"LOG_APP_NAME,default=app"`
	// The level to log at, must be one of DEBUG, INFO, WARN, ERROR, FATAL, PANIC.
	LogLevel string `env:"LOG_LEVEL"`
	// LogDisableStderr says to disable logging to stderr.
	LogDisableStderr bool `env:"LOG_DISABLE_STDERR"`
	// The syslog network, either udp or tcp.
	// Must be set with SyslogAddress.
	// If not set and LogDir not set, logs will be to stderr.
	SyslogNetwork string `env:"SYSLOG_NETWORK"`
	// The syslog host:port.
	// Must be set with SyslogNetwork.
	// If not set and LogDir not set, logs will be to stderr.
	SyslogAddress string `env:"SYSLOG_ADDRESS"`
	// The current token.
	// Must be set with CurrentSyslogNetwork or CurrentStderr.
	CurrentToken string `env:"CURRENT_TOKEN"`
	// The current syslog host:port.
	// Must be set with CurrentToken.
	CurrentSyslogAddress string `env:"CURRENT_SYSLOG_ADDRESS"`
	// Output logs in current format to stdout.
	CurrentStdout bool `env:"CURRENT_STDOUT"`
}

// Setup gets the Env from the environment, and then calls SetupEnv.
func Setup() error {
	appEnv := Env{}
	if err := env.Populate(&appEnv); err != nil {
		return err
	}
	return SetupEnv(appEnv)
}

// SetupEnv sets up logging for the given Env.
func SetupEnv(env Env) error {
	var pushers []lion.Pusher
	logAppName := env.LogAppName
	if logAppName == "" {
		logAppName = "app"
	}
	if !env.LogDisableStderr {
		pushers = append(pushers, lion.NewTextWritePusher(os.Stderr))
	}
	if env.CurrentStdout {
		pushers = append(pushers, lion.NewWritePusher(os.Stdout, currentlion.NewMarshaller()))
	}
	if env.SyslogNetwork != "" && env.SyslogAddress != "" {
		pusher, err := newSyslogPusher(env.SyslogNetwork, env.SyslogAddress, logAppName)
		if err != nil {
			return err
		}
		pushers = append(pushers, pusher)
	}
	if env.CurrentToken != "" && env.CurrentSyslogAddress != "" {
		pusher, err := currentlion.NewPusher(logAppName, env.CurrentSyslogAddress, env.CurrentToken)
		if err != nil {
			return err
		}
		pushers = append(pushers, pusher)
	}
	switch len(pushers) {
	case 0:
		lion.SetLogger(lion.DiscardLogger)
	case 1:
		lion.SetLogger(lion.NewLogger(pushers[0]))
	default:
		lion.SetLogger(lion.NewLogger(lion.NewMultiPusher(pushers...)))
	}
	lion.RedirectStdLogger()
	grpclion.RedirectGrpclog()
	if env.LogLevel != "" {
		level, err := lion.NameToLevel(strings.ToUpper(env.LogLevel))
		if err != nil {
			return err
		}
		lion.SetLevel(level)
	}
	return nil
}

// Main runs env.Main along with Setup.
func Main(do func(interface{}) error, appEnv interface{}, decoders ...env.Decoder) {
	env.Main(
		func(appEnvObj interface{}) error {
			if err := Setup(); err != nil {
				return err
			}
			return do(appEnvObj)
		},
		appEnv,
		decoders...,
	)
}

func newSyslogPusher(syslogNetwork string, syslogAddress string, logAppName string) (lion.Pusher, error) {
	writer, err := syslog.Dial(
		syslogNetwork,
		syslogAddress,
		syslog.LOG_INFO,
		logAppName,
	)
	if err != nil {
		return nil, err
	}
	return sysloglion.NewPusher(writer), nil
}