...

Source file src/github.com/sirupsen/logrus/writer_test.go

Documentation: github.com/sirupsen/logrus

     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  		// create a stdlib log.Logger that writes to
    23  		// logrus.Logger.
    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  	// Use logrus for standard log output
    37  	// Note that `log` here references stdlib's log
    38  	// Not logrus imported under the name `log`.
    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  	// Test is flaky because it writes in another goroutine,
    60  	// we need to make sure to wait a bit so all write are done.
    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  	// write more than 64KB
    78  	const bigWriteLen = bufio.MaxScanTokenSize + 100
    79  	output := make([]byte, bigWriteLen)
    80  	// lets not write zero bytes
    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  	// Test is flaky because it writes in another goroutine,
    92  	// we need to make sure to wait a bit so all write are done.
    93  	time.Sleep(500 * time.Millisecond)
    94  
    95  	lines := strings.Split(strings.TrimRight(buf.String(), "\n"), "\n")
    96  	// we should have 4 lines because we wrote more than 64 KB each time
    97  	assert.Len(t, lines, 4, "logger printed incorrect number of lines")
    98  }
    99  

View as plain text