-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlog_test.go
More file actions
116 lines (89 loc) · 3.14 KB
/
log_test.go
File metadata and controls
116 lines (89 loc) · 3.14 KB
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package log_test
import (
"bytes"
"os"
"testing"
"github.com/lattesec/log"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestLoggerLevelFiltering(t *testing.T) {
var buf bytes.Buffer
l, err := log.NewLogger().
WithLevel(log.INFO).
WithStderr(false).
WithStdout(false).
WithHandlers(log.NewWriterHandler(&buf)).
Build()
require.NoError(t, err)
require.NoError(t, l.Start(), "failed to start logger")
l.Debug().Msg("debug msg").Send() // should be filtered out
l.Info().Msg("info msg").Send()
require.NoError(t, l.Close())
got := buf.String()
assert.NotContains(t, got, "debug msg", "expected debug message to be filtered out")
assert.Contains(t, got, "info msg", "expected info message to be logged")
}
func TestMultipleHandlers(t *testing.T) {
var out1, out2 bytes.Buffer
l, err := log.NewLogger().
WithLevel(log.INFO).
WithStderr(false).
WithStdout(false).
WithHandlers(log.NewWriterHandler(&out1), log.NewWriterHandler(&out2)).
Build()
require.NoError(t, err)
require.NoError(t, l.Start(), "failed to start logger")
l.Info().Msg("log once").Send()
require.NoError(t, l.Close())
assert.Contains(t, out1.String(), "log once", "expected log message to be logged to first handler")
assert.Contains(t, out2.String(), "log once", "expected log message to be logged to second handler")
}
func TestFileHandlerWritesToFile(t *testing.T) {
tmpfile, err := os.CreateTemp("", "logtest-*.log")
require.NoError(t, err)
defer func() { _ = os.Remove(tmpfile.Name()) }()
require.NoError(t, tmpfile.Close())
l, err := log.NewLogger().
WithLevel(log.INFO).
WithStderr(false).
WithStdout(false).
WithFile(tmpfile.Name(), 0).
Build()
require.NoError(t, err)
require.NoError(t, l.Start(), "failed to start logger")
l.Info().Msg("file handler test").Send()
require.NoError(t, l.Close())
data, err := os.ReadFile(tmpfile.Name())
require.NoError(t, err)
assert.Contains(t, string(data), "file handler test", "expected log message to be written to file")
}
func TestClosingOneOfManyFileHandlersStillWorks(t *testing.T) {
tmpfile, err := os.CreateTemp("", "logtest-*.log")
require.NoError(t, err)
defer func() { _ = os.Remove(tmpfile.Name()) }()
require.NoError(t, tmpfile.Close())
h1, err := log.NewFileHandler(tmpfile.Name())
require.NoError(t, err)
h2, err := log.NewFileHandler(tmpfile.Name())
require.NoError(t, err)
t.Log("starting handlers")
require.ErrorIs(t, h1.Start(), log.ErrAlreadyStarted)
require.ErrorIs(t, h2.Start(), log.ErrAlreadyStarted)
t.Log("sending logs")
h1.Handle("test h1", &log.LogMessage{Level: log.INFO, Message: "from h1"})
h2.Handle("test h2", &log.LogMessage{Level: log.INFO, Message: "from h2"})
t.Log("closing h1")
require.NoError(t, h1.Close())
t.Log("sending logs to h2")
h2.Handle("test h2", &log.LogMessage{Level: log.INFO, Message: "still from h2"})
t.Log("closing h2")
require.NoError(t, h2.Close())
t.Log("verifying file content")
data, err := os.ReadFile(tmpfile.Name())
require.NoError(t, err)
content := string(data)
assert.Contains(t, content, "from h1")
assert.Contains(t, content, "from h2")
assert.Contains(t, content, "still from h2")
}