whatcanGOwrong
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
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")
|
||||
}
|
||||
Reference in New Issue
Block a user