From 3636b39e6b797c60f436ca79f1497afeb1851d6c Mon Sep 17 00:00:00 2001 From: Filip Richter Date: Thu, 19 Jul 2018 16:00:06 +0200 Subject: [PATCH] Logging levels refactored, cli option to select LogLevels, config file to select options --- src/main.go | 33 ++++++++++++++++++++++++++++----- src/mqtt-auth.go | 20 ++++++++++---------- src/mqtt-packet.go | 6 +++--- src/mqtt-session.go | 8 ++++---- 4 files changed, 45 insertions(+), 22 deletions(-) diff --git a/src/main.go b/src/main.go index 7504768..634c700 100644 --- a/src/main.go +++ b/src/main.go @@ -45,6 +45,8 @@ var Version string var Build string var Date string +var logLevel string + var authClient *http.Client func main() { @@ -53,7 +55,8 @@ func main() { formatter.FullTimestamp = true formatter.TimestampFormat = "2006-01-02 15:04:05.000000000" log.SetFormatter(formatter) - log.SetLevel(log.DebugLevel) + + flag.String(flag.DefaultConfigFlagname, "", "Path to config file") flag.IntVar(&mqttPort, "mqtt-port", 1883, "Mqtt port to listen to.") flag.StringVar(&mqttHost, "mqtt-host", "0.0.0.0", "Mqtt interface to listen to.") @@ -82,17 +85,37 @@ func main() { flag.StringVar(&authURL, "auth-url", "", "URL to the authz/authn service") flag.StringVar(&authCAFile, "auth-ca-file", "", "PEM encoded CA's certificate file for the authz/authn service") + + flag.StringVar(&logLevel, "log-level", "info", "Log level [debug, info, warn, error](default: info)") flag.Parse() + + switch logLevel{ + case "debug": + log.SetLevel(log.DebugLevel) + case "info": + log.SetLevel(log.InfoLevel) + case "warn": + log.SetLevel(log.WarnLevel) + case "error": + log.SetLevel(log.ErrorLevel) + default: + log.SetLevel(log.DebugLevel) + logLevel = "debug" + } + log.Println("Starting mqtt-proxy @ ", Version, Build, Date) log.Println("mqtt server ", mqttBrokerHost, mqttBrokerPort, mqttBrokerUsername, mqttBrokerPassword) + log.Println("LogLevel:", logLevel) + if authURL != "" { - log.Println("auth connect : ", authURL+"/connect") - log.Println("auth publish : ", authURL+"/publish") - log.Println("auth subscribe : ", authURL+"/subscribe") + log.Println("auth url : ", authURL) + log.Debugln("auth connect : ", authURL+"/connect") + log.Debugln("auth publish : ", authURL+"/publish") + log.Debugln("auth subscribe : ", authURL+"/subscribe") } else { - log.Println("auth : no auth url configured : bypassing!") + log.Warnln("auth : no auth url configured : bypassing!") } // Load CA cert diff --git a/src/mqtt-auth.go b/src/mqtt-auth.go index 24acbf0..56f3b5d 100644 --- a/src/mqtt-auth.go +++ b/src/mqtt-auth.go @@ -81,7 +81,7 @@ func (session *Session) request(way string, uri string, request interface{}, res return 0, err } - log.Println("Session", session.id, way, "- Auth response", authURL+uri, resp.StatusCode, string(body)) + log.Debugln("Session", session.id, way, "- Auth response", authURL+uri, resp.StatusCode, string(body)) if response != nil { err = json.Unmarshal(body, response) if err != nil { @@ -112,15 +112,15 @@ func (session *Session) HandleConnect(way string, p *packets.ConnectPacket, r ne //Override information if resp.ClientIdentifier != "" && resp.ClientIdentifier != p.ClientIdentifier { - log.Println("Session", session.id, way, "- CONNECT alter ClientIdentifier", p.ClientIdentifier, "-->", resp.ClientIdentifier) + log.Debugln("Session", session.id, way, "- CONNECT alter ClientIdentifier", p.ClientIdentifier, "-->", resp.ClientIdentifier) p.ClientIdentifier = resp.ClientIdentifier } if resp.Username != "" && resp.Username != p.Username { - log.Println("Session", session.id, way, "- CONNECT alter Username", p.Username, "-->", resp.Username) + log.Debugln("Session", session.id, way, "- CONNECT alter Username", p.Username, "-->", resp.Username) p.Username = resp.Username } if resp.Password != "" && resp.Password != string(p.Password) { - log.Println("Session", session.id, way, "- CONNECT alter Password") + log.Debugln("Session", session.id, way, "- CONNECT alter Password") p.Password = []byte(resp.Password) } session.Username = p.Username @@ -130,7 +130,7 @@ func (session *Session) HandleConnect(way string, p *packets.ConnectPacket, r ne } func (session *Session) HandleSubscribe(way string, p *packets.SubscribePacket, r net.Conn, w net.Conn) error { - log.Println("Session", session.id, way, "- SUBSCRIBE", p.Topics, p.Qos) + log.Debugln("Session", session.id, way, "- SUBSCRIBE", p.Topics, p.Qos) var resp MQTTSubscribeResponse topics := p.Topics for i := range p.Topics { @@ -153,7 +153,7 @@ func (session *Session) HandleSubscribe(way string, p *packets.SubscribePacket, } if resp.Topic != "" && resp.Topic != topics[i] { - log.Println("Session", session.id, way, "- SUBSCRIBE alter topic", i, topics[i], "-->", resp.Topic) + log.Debugln("Session", session.id, way, "- SUBSCRIBE alter topic", i, topics[i], "-->", resp.Topic) topics[i] = resp.Topic } } @@ -170,8 +170,8 @@ func (session *Session) HandlePublish(way string, p *packets.PublishPacket, r ne action = "RECEIVE" uri = "/receive" } - log.Println("Session", session.id, way, "- "+action, r.RemoteAddr().String(), w.RemoteAddr().String()) - log.Println("Session", session.id, way, "- "+action, p.TopicName, p.Qos, string(p.Payload)) + log.Debugln("Session", session.id, way, "- "+action, r.RemoteAddr().String(), w.RemoteAddr().String()) + log.Debugln("Session", session.id, way, "- "+action, p.TopicName, p.Qos, string(p.Payload)) rq := MQTTPublish{session.id, session.Username, session.ClientIdentifier, p.TopicName, int(p.Qos), string(p.Payload)} var resp MQTTPublishResponse code, err := session.request(way, uri, rq, &resp) @@ -184,11 +184,11 @@ func (session *Session) HandlePublish(way string, p *packets.PublishPacket, r ne return errors.New(action + " Not Authorized") } if resp.Topic != "" && resp.Topic != p.TopicName { - log.Println("Session", session.id, way, "- "+action+" alter topic", p.TopicName, "-->", resp.Topic) + log.Debugln("Session", session.id, way, "- "+action+" alter topic", p.TopicName, "-->", resp.Topic) p.TopicName = resp.Topic } if resp.Payload != "" && resp.Payload != string(p.Payload) { - log.Println("Session", session.id, way, "- "+action+"alter topic", p.Payload, "-->", resp.Payload) + log.Debugln("Session", session.id, way, "- "+action+"alter topic", p.Payload, "-->", resp.Payload) p.Payload = []byte(resp.Payload) } return nil diff --git a/src/mqtt-packet.go b/src/mqtt-packet.go index b7842a8..0970569 100644 --- a/src/mqtt-packet.go +++ b/src/mqtt-packet.go @@ -11,11 +11,11 @@ func (session *Session) ForwardMQTTPacket(way string, r net.Conn, w net.Conn) er cp, err := packets.ReadPacket(r) if err != nil { if !session.closed { - log.Errorln("Session", session.id, way, "- Error reading MQTT packet", err) + log.Warnln("Session", session.id, way, "- Error reading MQTT packet", err) } return err } - log.Println("Session", session.id, way, "- Forward MQTT packet", cp.String()) + log.Debugln("Session", session.id, way, "- Forward MQTT packet", cp.String()) if authURL != "" { switch p := cp.(type) { @@ -33,7 +33,7 @@ func (session *Session) ForwardMQTTPacket(way string, r net.Conn, w net.Conn) er } if err != nil { - log.Println("Session", session.id, way, "- Forward MQTT packet", err) + log.Debugln("Session", session.id, way, "- Forward MQTT packet", err) return err } diff --git a/src/mqtt-session.go b/src/mqtt-session.go index dadd0a5..61eac11 100644 --- a/src/mqtt-session.go +++ b/src/mqtt-session.go @@ -42,7 +42,7 @@ func (session *Session) forwardHalf(way string, c1 net.Conn, c2 net.Conn) { //io.Copy(c1, c2) for { - log.Println("Session", session.id, way, "- Wait Packet", c1.RemoteAddr().String(), c2.RemoteAddr().String()) + log.Debugln("Session", session.id, way, "- Wait Packet", c1.RemoteAddr().String(), c2.RemoteAddr().String()) err := session.ForwardMQTTPacket(way, c1, c2) if err != nil { session.closed = true @@ -84,7 +84,7 @@ func mqttAccept(l net.Listener) { // Listen for an incoming connection. conn, err := l.Accept() if err != nil { - log.Println("Error accepting: ", err.Error()) + log.Errorln("Error accepting: ", err.Error()) os.Exit(1) } // Handle connections in a new goroutine. @@ -98,7 +98,7 @@ func mqttListen() { addr := mqttHost + ":" + strconv.Itoa(mqttPort) l, err := net.Listen("tcp", addr) if err != nil { - log.Println("mqtt: Error listening mqtt://"+addr, err.Error()) + log.Errorln("mqtt: Error listening mqtt://"+addr, err.Error()) os.Exit(1) } // Close the listener when the application closes. @@ -119,7 +119,7 @@ func mqttsListen() { addr := mqttsHost + ":" + strconv.Itoa(mqttsPort) l, err := tls.Listen("tcp", addr, &config) if err != nil { - log.Println("mqtts: Error listening mqtts://"+addr, err.Error()) + log.Errorln("mqtts: Error listening mqtts://"+addr, err.Error()) os.Exit(1) } // Close the listener when the application closes.