go-cnj-helper/logger.go

141 lines
2.8 KiB
Go

package gocnjhelper
import (
"encoding/json"
"os"
"time"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
var (
logsClient *Client
gserviceName string
gserviceType string
grabbitMqLoggingEnabled bool
)
const RabbitMqQueueLogs = "cnj.logs"
func InitLogger(debug bool, colorizedOutput bool, rabbitMqLogging bool, rabbitMqConnAddr string, serviceName string, serviceType string) {
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
if debug {
zerolog.SetGlobalLevel(zerolog.DebugLevel)
} else {
zerolog.SetGlobalLevel(zerolog.InfoLevel)
}
if colorizedOutput {
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: "15:04:05"})
}
grabbitMqLoggingEnabled = rabbitMqLogging
if rabbitMqLogging {
gserviceName = serviceName
gserviceType = serviceType
logsClient = NewClient(
ExchangeSettings{},
QueueSettings{
Enabled: true,
Name: RabbitMqQueueLogs,
Durable: true,
DeleteWhenUnused: false,
Exclusive: false,
NoWait: false,
Arguments: nil,
QueuePublishSettings: QueuePublishSettings{
Mandatory: false,
Immediate: false,
DeliveryMode: DeliveryModePersistent,
ContentType: ContentTypeJson,
},
},
ChannelQosSettingsDefault,
Config{
ReconnectDelay: 1 * time.Second,
ReInitDelay: 1 * time.Second,
ResendDelay: 5 * time.Second,
},
rabbitMqConnAddr)
}
LogInfof("Debug: %t", debug)
}
func LogInfo(msg string) {
log.Info().Msg(msg)
}
func LogInfof(format string, v ...interface{}) {
log.Info().Msgf(format, v)
}
func LogDebug(msg string) {
log.Debug().Msg(msg)
pushLogMessage(1, msg)
}
func LogDebugf(format string, v ...interface{}) {
log.Debug().Msgf(format, v)
}
func LogError(msg string) {
log.Error().Msg(msg)
}
func LogErrorf(format string, v ...interface{}) {
log.Error().Msgf(format, v)
}
func LogFatal(msg string) {
log.Fatal().Msg(msg)
}
func LogFatalf(format string, v ...interface{}) {
log.Fatal().Msgf(format, v)
}
type RabbitMqLogMessage struct {
MessageType uint8
ServiceName string
ServiceType string
Msg string
Timestamp int64
}
func pushLogMessage(messageType uint8, logMsg string) {
if !grabbitMqLoggingEnabled {
return
}
rabbitMqLogMessage := RabbitMqLogMessage{
MessageType: messageType,
ServiceName: gserviceName,
ServiceType: gserviceType,
Msg: logMsg,
Timestamp: time.Now().Unix(),
}
LogInfof("serviceType %s serviceName %s", gserviceType, gserviceName)
msg, err := json.Marshal(rabbitMqLogMessage)
if err != nil {
LogErrorf("Failed to marshal rabbitMqLogMessage, err: %s", err)
return
}
LogInfof("msg %s %s", msg, string(msg))
/*
if err = logsClient.PushQueueMessage(msg); err != nil {
LogErrorf("Failed to push log message, err: %s", err)
}
*/
}