/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
}
|