Add extra fields to runmqserver JSON log

This commit is contained in:
Arthur Barr
2018-03-12 16:27:57 +00:00
parent 98c594c91e
commit d495b3640e
6 changed files with 66 additions and 19 deletions

View File

@@ -21,6 +21,7 @@ import (
"fmt"
"io"
"os"
"os/user"
"sync"
"time"
)
@@ -39,10 +40,21 @@ type Logger struct {
json bool
processName string
pid int
serverName string
host string
user *user.User
}
// NewLogger creates a new logger
func NewLogger(writer io.Writer, debug bool, json bool) *Logger {
func NewLogger(writer io.Writer, debug bool, json bool, serverName string) (*Logger, error) {
hostname, err := os.Hostname()
if err != nil {
return nil, err
}
user, err := user.Current()
if err != nil {
return nil, err
}
return &Logger{
mutex: sync.Mutex{},
writer: writer,
@@ -50,7 +62,10 @@ func NewLogger(writer io.Writer, debug bool, json bool) *Logger {
json: json,
processName: os.Args[0],
pid: os.Getpid(),
}
serverName: serverName,
host: hostname,
user: user,
}, nil
}
func (l *Logger) format(entry map[string]interface{}) (string, error) {
@@ -72,8 +87,12 @@ func (l *Logger) log(level string, msg string) {
"message": fmt.Sprint(msg),
"ibm_datetime": t.Format(timestampFormat),
"loglevel": level,
"host": l.host,
"ibm_serverName": l.serverName,
"ibm_processName": l.processName,
"ibm_processId": l.pid,
"ibm_userName": l.user.Username,
"type": "mq_log",
}
s, err := l.format(entry)
l.mutex.Lock()

View File

@@ -25,11 +25,14 @@ import (
func TestJSONLogger(t *testing.T) {
buf := new(bytes.Buffer)
l := NewLogger(buf, true, true)
l, err := NewLogger(buf, true, true, t.Name())
if err != nil {
t.Fatal(err)
}
s := "Hello world"
l.Print(s)
var e map[string]interface{}
err := json.Unmarshal([]byte(buf.String()), &e)
err = json.Unmarshal([]byte(buf.String()), &e)
if err != nil {
t.Error(err)
}
@@ -40,7 +43,10 @@ func TestJSONLogger(t *testing.T) {
func TestSimpleLogger(t *testing.T) {
buf := new(bytes.Buffer)
l := NewLogger(buf, true, false)
l, err := NewLogger(buf, true, false, t.Name())
if err != nil {
t.Fatal(err)
}
s := "Hello world"
l.Print(s)
if !strings.Contains(buf.String(), s) {