lib/log.go (80 lines of code) (raw):
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
package dhcplb
import (
"github.com/golang/glog"
"net"
"time"
)
// LogMessage holds the info of a log line.
type LogMessage struct {
Version int
Packet []byte
Peer *net.UDPAddr
Server string
ServerIsRC bool
Latency time.Duration
Success bool
ErrorName string
ErrorDetails error
}
// PersonalizedLogger is an interface used to log a LogMessage using your own
// logic. It will be used in loggerHelperImpl.
type PersonalizedLogger interface {
Log(msg LogMessage) error
}
// LoggerHelper is an interface used to log.
type loggerHelper interface {
LogErr(start time.Time, server *DHCPServer, packet []byte, peer *net.UDPAddr, errName string, err error) error
LogSuccess(start time.Time, server *DHCPServer, packet []byte, peer *net.UDPAddr) error
}
// loggerHelperImpl is the implementation of the above interface.
type loggerHelperImpl struct {
personalizedLogger PersonalizedLogger
version int
}
func (h *loggerHelperImpl) LogErr(start time.Time, server *DHCPServer, packet []byte, peer *net.UDPAddr, errName string, err error) error {
if h.personalizedLogger != nil {
hostname := ""
isRC := false
if server != nil {
hostname = server.Hostname
isRC = server.IsRC
}
msg := LogMessage{
Version: h.version,
Packet: packet,
Peer: peer,
Server: hostname,
ServerIsRC: isRC,
Latency: time.Since(start),
Success: false,
ErrorName: errName,
ErrorDetails: err,
}
err := h.personalizedLogger.Log(msg)
if err != nil {
glog.Errorf("Failed to log error: %s", err)
return err
}
}
return nil
}
func (h *loggerHelperImpl) LogSuccess(start time.Time, server *DHCPServer, packet []byte, peer *net.UDPAddr) error {
if h.personalizedLogger != nil {
hostname := ""
isRC := false
if server != nil {
hostname = server.Hostname
isRC = server.IsRC
}
msg := LogMessage{
Version: h.version,
Packet: packet,
Peer: peer,
Server: hostname,
ServerIsRC: isRC,
Latency: time.Since(start),
Success: true,
}
err := h.personalizedLogger.Log(msg)
if err != nil {
glog.Errorf("Failed to log error: %s", err)
return err
}
}
return nil
}