forked from goodrain/rainbond
/
testlog.go
84 lines (70 loc) · 2.34 KB
/
testlog.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// RAINBOND, Application Management Platform
// Copyright (C) 2014-2017 Goodrain Co., Ltd.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version. For any non-GPL usage of Rainbond,
// one or multiple Commercial Licenses authorized by Goodrain Co., Ltd.
// must be obtained first.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package testlog
import (
"bytes"
"fmt"
"github.com/Sirupsen/logrus"
"github.com/goodrain/rainbond/node/nodem/logger"
)
// Name is the name of the file that the jsonlogger logs to.
const Name = "test"
// TestLogger is Logger implementation for test
type TestLogger struct {
buf *bytes.Buffer // json-encoded extra attributes
}
func init() {
if err := logger.RegisterLogDriver(Name, New); err != nil {
logrus.Fatal(err)
}
if err := logger.RegisterLogOptValidator(Name, ValidateLogOpt); err != nil {
logrus.Fatal(err)
}
}
// New creates new JSONFileLogger which writes to filename passed in
// on given context.
func New(info logger.Info) (logger.Logger, error) {
logrus.Debugf("create logger driver for %s", info.ContainerName)
return &TestLogger{
buf: bytes.NewBuffer(nil),
}, nil
}
// Log converts logger.Message to jsonlog.JSONLog and serializes it to file.
func (l *TestLogger) Log(msg *logger.Message) error {
fmt.Println(string(msg.Line))
return nil
}
// ValidateLogOpt looks for json specific log options max-file & max-size.
func ValidateLogOpt(cfg map[string]string) error {
for key := range cfg {
switch key {
case "max-file":
case "max-size":
case "labels":
case "env":
default:
return fmt.Errorf("unknown log opt '%s' for json-file log driver", key)
}
}
return nil
}
// Close closes underlying file and signals all readers to stop.
func (l *TestLogger) Close() error {
return nil
}
// Name returns name of this logger.
func (l *TestLogger) Name() string {
return Name
}