mirror of https://github.com/sirupsen/logrus.git
99 lines
2.4 KiB
Go
99 lines
2.4 KiB
Go
package logrus_test
|
|
|
|
import (
|
|
"bufio"
|
|
"bytes"
|
|
"log"
|
|
"net/http"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func ExampleLogger_Writer_httpServer() {
|
|
logger := logrus.New()
|
|
w := logger.Writer()
|
|
defer w.Close()
|
|
|
|
srv := http.Server{
|
|
// create a stdlib log.Logger that writes to
|
|
// logrus.Logger.
|
|
ErrorLog: log.New(w, "", 0),
|
|
}
|
|
|
|
if err := srv.ListenAndServe(); err != nil {
|
|
logger.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func ExampleLogger_Writer_stdlib() {
|
|
logger := logrus.New()
|
|
logger.Formatter = &logrus.JSONFormatter{}
|
|
|
|
// Use logrus for standard log output
|
|
// Note that `log` here references stdlib's log
|
|
// Not logrus imported under the name `log`.
|
|
log.SetOutput(logger.Writer())
|
|
}
|
|
|
|
func TestWriterSplitNewlines(t *testing.T) {
|
|
buf := bytes.NewBuffer(nil)
|
|
logger := logrus.New()
|
|
logger.Formatter = &logrus.TextFormatter{
|
|
DisableColors: true,
|
|
DisableTimestamp: true,
|
|
}
|
|
logger.SetOutput(buf)
|
|
writer := logger.Writer()
|
|
|
|
const logNum = 10
|
|
|
|
for i := 0; i < logNum; i++ {
|
|
_, err := writer.Write([]byte("bar\nfoo\n"))
|
|
assert.NoError(t, err, "writer.Write failed")
|
|
}
|
|
writer.Close()
|
|
// Test is flaky because it writes in another goroutine,
|
|
// we need to make sure to wait a bit so all write are done.
|
|
time.Sleep(500 * time.Millisecond)
|
|
|
|
lines := strings.Split(strings.TrimRight(buf.String(), "\n"), "\n")
|
|
assert.Len(t, lines, logNum*2, "logger printed incorrect number of lines")
|
|
}
|
|
|
|
func TestWriterSplitsMax64KB(t *testing.T) {
|
|
buf := bytes.NewBuffer(nil)
|
|
logger := logrus.New()
|
|
logger.Formatter = &logrus.TextFormatter{
|
|
DisableColors: true,
|
|
DisableTimestamp: true,
|
|
}
|
|
logger.SetOutput(buf)
|
|
writer := logger.Writer()
|
|
|
|
// write more than 64KB
|
|
const bigWriteLen = bufio.MaxScanTokenSize + 100
|
|
output := make([]byte, bigWriteLen)
|
|
// lets not write zero bytes
|
|
for i := 0; i < bigWriteLen; i++ {
|
|
output[i] = 'A'
|
|
}
|
|
|
|
for i := 0; i < 3; i++ {
|
|
len, err := writer.Write(output)
|
|
assert.NoError(t, err, "writer.Write failed")
|
|
assert.Equal(t, bigWriteLen, len, "bytes written")
|
|
}
|
|
writer.Close()
|
|
// Test is flaky because it writes in another goroutine,
|
|
// we need to make sure to wait a bit so all write are done.
|
|
time.Sleep(500 * time.Millisecond)
|
|
|
|
lines := strings.Split(strings.TrimRight(buf.String(), "\n"), "\n")
|
|
// we should have 4 lines because we wrote more than 64 KB each time
|
|
assert.Len(t, lines, 4, "logger printed incorrect number of lines")
|
|
}
|