...
1 package logrus_test
2
3 import (
4 "bufio"
5 "bytes"
6 "log"
7 "net/http"
8 "strings"
9 "testing"
10 "time"
11
12 "github.com/sirupsen/logrus"
13 "github.com/stretchr/testify/assert"
14 )
15
16 func ExampleLogger_Writer_httpServer() {
17 logger := logrus.New()
18 w := logger.Writer()
19 defer w.Close()
20
21 srv := http.Server{
22
23
24 ErrorLog: log.New(w, "", 0),
25 }
26
27 if err := srv.ListenAndServe(); err != nil {
28 logger.Fatal(err)
29 }
30 }
31
32 func ExampleLogger_Writer_stdlib() {
33 logger := logrus.New()
34 logger.Formatter = &logrus.JSONFormatter{}
35
36
37
38
39 log.SetOutput(logger.Writer())
40 }
41
42 func TestWriterSplitNewlines(t *testing.T) {
43 buf := bytes.NewBuffer(nil)
44 logger := logrus.New()
45 logger.Formatter = &logrus.TextFormatter{
46 DisableColors: true,
47 DisableTimestamp: true,
48 }
49 logger.SetOutput(buf)
50 writer := logger.Writer()
51
52 const logNum = 10
53
54 for i := 0; i < logNum; i++ {
55 _, err := writer.Write([]byte("bar\nfoo\n"))
56 assert.NoError(t, err, "writer.Write failed")
57 }
58 writer.Close()
59
60
61 time.Sleep(500 * time.Millisecond)
62
63 lines := strings.Split(strings.TrimRight(buf.String(), "\n"), "\n")
64 assert.Len(t, lines, logNum*2, "logger printed incorrect number of lines")
65 }
66
67 func TestWriterSplitsMax64KB(t *testing.T) {
68 buf := bytes.NewBuffer(nil)
69 logger := logrus.New()
70 logger.Formatter = &logrus.TextFormatter{
71 DisableColors: true,
72 DisableTimestamp: true,
73 }
74 logger.SetOutput(buf)
75 writer := logger.Writer()
76
77
78 const bigWriteLen = bufio.MaxScanTokenSize + 100
79 output := make([]byte, bigWriteLen)
80
81 for i := 0; i < bigWriteLen; i++ {
82 output[i] = 'A'
83 }
84
85 for i := 0; i < 3; i++ {
86 len, err := writer.Write(output)
87 assert.NoError(t, err, "writer.Write failed")
88 assert.Equal(t, bigWriteLen, len, "bytes written")
89 }
90 writer.Close()
91
92
93 time.Sleep(500 * time.Millisecond)
94
95 lines := strings.Split(strings.TrimRight(buf.String(), "\n"), "\n")
96
97 assert.Len(t, lines, 4, "logger printed incorrect number of lines")
98 }
99
View as plain text