@@ -246,7 +246,7 @@ func (s Stream) Head(n int64) Stream {
|
|||||||
}
|
}
|
||||||
if n == 0 {
|
if n == 0 {
|
||||||
// let successive method go ASAP even we have more items to skip
|
// let successive method go ASAP even we have more items to skip
|
||||||
// why we don't just break the loop, because if break,
|
// why we don't just break the loop, because if breaks,
|
||||||
// this former goroutine will block forever, which will cause goroutine leak.
|
// this former goroutine will block forever, which will cause goroutine leak.
|
||||||
close(source)
|
close(source)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,8 +79,10 @@ func (l *durationLogger) WithDuration(duration time.Duration) Logger {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (l *durationLogger) write(writer io.Writer, level string, val interface{}) {
|
func (l *durationLogger) write(writer io.Writer, level string, val interface{}) {
|
||||||
l.Timestamp = getTimestamp()
|
outputJson(writer, &durationLogger{
|
||||||
l.Level = level
|
Timestamp: getTimestamp(),
|
||||||
l.Content = val
|
Level: level,
|
||||||
outputJson(writer, l)
|
Content: val,
|
||||||
|
Duration: l.Duration,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,13 @@ func TestWithDurationErrorf(t *testing.T) {
|
|||||||
assert.True(t, strings.Contains(builder.String(), "duration"), builder.String())
|
assert.True(t, strings.Contains(builder.String(), "duration"), builder.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestWithDurationErrorv(t *testing.T) {
|
||||||
|
var builder strings.Builder
|
||||||
|
log.SetOutput(&builder)
|
||||||
|
WithDuration(time.Second).Errorv("foo")
|
||||||
|
assert.True(t, strings.Contains(builder.String(), "duration"), builder.String())
|
||||||
|
}
|
||||||
|
|
||||||
func TestWithDurationInfo(t *testing.T) {
|
func TestWithDurationInfo(t *testing.T) {
|
||||||
var builder strings.Builder
|
var builder strings.Builder
|
||||||
log.SetOutput(&builder)
|
log.SetOutput(&builder)
|
||||||
@@ -37,6 +44,13 @@ func TestWithDurationInfof(t *testing.T) {
|
|||||||
assert.True(t, strings.Contains(builder.String(), "duration"), builder.String())
|
assert.True(t, strings.Contains(builder.String(), "duration"), builder.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestWithDurationInfov(t *testing.T) {
|
||||||
|
var builder strings.Builder
|
||||||
|
log.SetOutput(&builder)
|
||||||
|
WithDuration(time.Second).Infov("foo")
|
||||||
|
assert.True(t, strings.Contains(builder.String(), "duration"), builder.String())
|
||||||
|
}
|
||||||
|
|
||||||
func TestWithDurationSlow(t *testing.T) {
|
func TestWithDurationSlow(t *testing.T) {
|
||||||
var builder strings.Builder
|
var builder strings.Builder
|
||||||
log.SetOutput(&builder)
|
log.SetOutput(&builder)
|
||||||
@@ -50,3 +64,10 @@ func TestWithDurationSlowf(t *testing.T) {
|
|||||||
WithDuration(time.Second).WithDuration(time.Hour).Slowf("foo")
|
WithDuration(time.Second).WithDuration(time.Hour).Slowf("foo")
|
||||||
assert.True(t, strings.Contains(builder.String(), "duration"), builder.String())
|
assert.True(t, strings.Contains(builder.String(), "duration"), builder.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestWithDurationSlowv(t *testing.T) {
|
||||||
|
var builder strings.Builder
|
||||||
|
log.SetOutput(&builder)
|
||||||
|
WithDuration(time.Second).WithDuration(time.Hour).Slowv("foo")
|
||||||
|
assert.True(t, strings.Contains(builder.String(), "duration"), builder.String())
|
||||||
|
}
|
||||||
|
|||||||
@@ -77,12 +77,16 @@ func (l *traceLogger) WithDuration(duration time.Duration) Logger {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (l *traceLogger) write(writer io.Writer, level string, val interface{}) {
|
func (l *traceLogger) write(writer io.Writer, level string, val interface{}) {
|
||||||
l.Timestamp = getTimestamp()
|
outputJson(writer, &traceLogger{
|
||||||
l.Level = level
|
logEntry: logEntry{
|
||||||
l.Content = val
|
Timestamp: getTimestamp(),
|
||||||
l.Trace = traceIdFromContext(l.ctx)
|
Level: level,
|
||||||
l.Span = spanIdFromContext(l.ctx)
|
Duration: l.Duration,
|
||||||
outputJson(writer, l)
|
Content: val,
|
||||||
|
},
|
||||||
|
Trace: traceIdFromContext(l.ctx),
|
||||||
|
Span: spanIdFromContext(l.ctx),
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithContext sets ctx to log, for keeping tracing information.
|
// WithContext sets ctx to log, for keeping tracing information.
|
||||||
|
|||||||
@@ -51,6 +51,10 @@ func TestTraceError(t *testing.T) {
|
|||||||
l.WithDuration(time.Second).Errorf(testlog)
|
l.WithDuration(time.Second).Errorf(testlog)
|
||||||
assert.True(t, strings.Contains(buf.String(), traceKey))
|
assert.True(t, strings.Contains(buf.String(), traceKey))
|
||||||
assert.True(t, strings.Contains(buf.String(), spanKey))
|
assert.True(t, strings.Contains(buf.String(), spanKey))
|
||||||
|
buf.Reset()
|
||||||
|
l.WithDuration(time.Second).Errorv(testlog)
|
||||||
|
assert.True(t, strings.Contains(buf.String(), traceKey))
|
||||||
|
assert.True(t, strings.Contains(buf.String(), spanKey))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestTraceInfo(t *testing.T) {
|
func TestTraceInfo(t *testing.T) {
|
||||||
@@ -72,6 +76,10 @@ func TestTraceInfo(t *testing.T) {
|
|||||||
l.WithDuration(time.Second).Infof(testlog)
|
l.WithDuration(time.Second).Infof(testlog)
|
||||||
assert.True(t, strings.Contains(buf.String(), traceKey))
|
assert.True(t, strings.Contains(buf.String(), traceKey))
|
||||||
assert.True(t, strings.Contains(buf.String(), spanKey))
|
assert.True(t, strings.Contains(buf.String(), spanKey))
|
||||||
|
buf.Reset()
|
||||||
|
l.WithDuration(time.Second).Infov(testlog)
|
||||||
|
assert.True(t, strings.Contains(buf.String(), traceKey))
|
||||||
|
assert.True(t, strings.Contains(buf.String(), spanKey))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestTraceSlow(t *testing.T) {
|
func TestTraceSlow(t *testing.T) {
|
||||||
@@ -93,6 +101,10 @@ func TestTraceSlow(t *testing.T) {
|
|||||||
l.WithDuration(time.Second).Slowf(testlog)
|
l.WithDuration(time.Second).Slowf(testlog)
|
||||||
assert.True(t, strings.Contains(buf.String(), traceKey))
|
assert.True(t, strings.Contains(buf.String(), traceKey))
|
||||||
assert.True(t, strings.Contains(buf.String(), spanKey))
|
assert.True(t, strings.Contains(buf.String(), spanKey))
|
||||||
|
buf.Reset()
|
||||||
|
l.WithDuration(time.Second).Slowv(testlog)
|
||||||
|
assert.True(t, strings.Contains(buf.String(), traceKey))
|
||||||
|
assert.True(t, strings.Contains(buf.String(), spanKey))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestTraceWithoutContext(t *testing.T) {
|
func TestTraceWithoutContext(t *testing.T) {
|
||||||
|
|||||||
Reference in New Issue
Block a user