2018-08-15 22:23:34 +00:00
|
|
|
package tunnel
|
2018-05-01 23:45:06 +00:00
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
|
|
|
|
"github.com/cloudflare/cloudflared/log"
|
|
|
|
"github.com/rifflock/lfshook"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
|
|
"gopkg.in/urfave/cli.v2"
|
|
|
|
|
|
|
|
"github.com/mitchellh/go-homedir"
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
)
|
|
|
|
|
|
|
|
var logger = log.CreateLogger()
|
|
|
|
|
|
|
|
func configMainLogger(c *cli.Context) error {
|
|
|
|
logLevel, err := logrus.ParseLevel(c.String("loglevel"))
|
|
|
|
if err != nil {
|
|
|
|
logger.WithError(err).Error("Unknown logging level specified")
|
|
|
|
return errors.Wrap(err, "Unknown logging level specified")
|
|
|
|
}
|
|
|
|
logger.SetLevel(logLevel)
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func configProtoLogger(c *cli.Context) (*logrus.Logger, error) {
|
|
|
|
protoLogLevel, err := logrus.ParseLevel(c.String("proto-loglevel"))
|
|
|
|
if err != nil {
|
|
|
|
logger.WithError(err).Fatal("Unknown protocol logging level specified")
|
|
|
|
return nil, errors.Wrap(err, "Unknown protocol logging level specified")
|
|
|
|
}
|
|
|
|
protoLogger := logrus.New()
|
|
|
|
protoLogger.Level = protoLogLevel
|
|
|
|
return protoLogger, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func initLogFile(c *cli.Context, loggers ...*logrus.Logger) error {
|
|
|
|
filePath, err := homedir.Expand(c.String("logfile"))
|
|
|
|
if err != nil {
|
|
|
|
return errors.Wrap(err, "Cannot resolve logfile path")
|
|
|
|
}
|
|
|
|
|
|
|
|
fileMode := os.O_WRONLY | os.O_APPEND | os.O_CREATE | os.O_TRUNC
|
|
|
|
// do not truncate log file if the client has been autoupdated
|
|
|
|
if c.Bool("is-autoupdated") {
|
|
|
|
fileMode = os.O_WRONLY | os.O_APPEND | os.O_CREATE
|
|
|
|
}
|
|
|
|
f, err := os.OpenFile(filePath, fileMode, 0664)
|
|
|
|
if err != nil {
|
|
|
|
errors.Wrap(err, fmt.Sprintf("Cannot open file %s", filePath))
|
|
|
|
}
|
|
|
|
defer f.Close()
|
|
|
|
pathMap := lfshook.PathMap{
|
|
|
|
logrus.InfoLevel: filePath,
|
|
|
|
logrus.ErrorLevel: filePath,
|
|
|
|
logrus.FatalLevel: filePath,
|
|
|
|
logrus.PanicLevel: filePath,
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, l := range loggers {
|
|
|
|
l.Hooks.Add(lfshook.NewHook(pathMap, &logrus.JSONFormatter{}))
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|